底辺大学生の奮闘プログラミング+α

プログラミング初心者が毎日書いたコードを載せたりします。競技プログラミングにも随時参加します。

Coder-Strike 2014 - Round 1A: Poster

Problem - A - Codeforces


一問目

30分もこの問題にかけてしまった。

B問題よりも難しく感じたのは自分だけだろうか?



・問題

N個の区画に分けられた横長のポスターがある。
また、自分は今、k番目の区画の前に立っている。
このポスターのそれぞれの区画に決められたN個のキャラクターを描きたい。

それぞれの区画にキャラクターを描く際には、その区画の前に立たないといけない。

一つの区画にキャラクターを描く作業に1時間
区画の移動(左右どちらでも)に1時間

がかかるとき、

最短で全ての区画のキャラクターを書き終える動きを出力せよ。

※出力オプション
ポスターに”x”を描く→PRINT x
左に移動→LEFT
右に移動→RIGHT



・解法

最短の動きというのは、

①現地点から近い方の端まで移動

②ポスターにキャラクターを描く

③移動

②③をもう一方の端まで繰り返す。


これを実装するだけ。
非常に簡単な問題だが、読解に時間がかかり死亡



・ソース

import java.util.Scanner;

public class A {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int k = sc.nextInt();
		String s = sc.next();
		
		int pos = k-1;
		while(pos!=0 && pos!=n-1){
			if(pos <= (n-1)/2){
				System.out.println("LEFT");
				pos--;
			}else{
				System.out.println("RIGHT");
				pos++;
			}
		}
		int way;
		if(pos==0)way=1;
		else way=-1;
		int pos2 = pos;
		for(int i=0; i<n; i++){
			if(way==1){
				System.out.println("PRINT "+s.charAt(pos2));
				if(i!=n-1)System.out.println("RIGHT");
				pos2++;
			}else{
				System.out.println("PRINT "+s.charAt(pos2));
				if(i!=n-1)System.out.println("LEFT");
				pos2--;
			}
		}
		sc.close();
	}
}