백준 2840번: 행운의 바퀴 [구현][시뮬레이션] - Java :: 매운코딩
728x90
300x250

 

https://www.acmicpc.net/problem/2840

 

2840번: 행운의 바퀴

첫째 줄에 마지막 회전에서 화살표가 가리키는 문자부터 시계방향으로 바퀴에 적어놓은 알파벳을 출력한다. 이때, 어떤 글자인지 결정하지 못하는 칸은 '?'를 출력한다. 만약, 상덕이가 적어놓

www.acmicpc.net

문제 자체는 쉬웠으나 여러 예외처리 조건이 많았던 문제.

글을 대충읽을수록 난관에 부딪힌다..ㅋ

알고리즘은 이렇게 지문이 길수록 쉬운것 같다. 말하는대로만 구현하면 되니깐...

 

1트에서 글자가 몇번바뀌는지 배열적으로 고려를 안했고,

2트에서 바퀴에 같은 글자가 두번이상 등장하지 않는다는 조건을 무시해서 틀렸었다.

3트만에 성공.ㅋ

 

 

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		//System.setIn(new FileInputStream("Test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());
		
		char wheel[] = new char[N];
		int cur = 0; //현재 바퀴가 가리키고 있는 위치
		
		//바퀴 돌리기
		for (int i = 0; i < K; i++) {
			st = new StringTokenizer(br.readLine());
			int S = Integer.parseInt(st.nextToken());
			char ch = st.nextToken().charAt(0);
			
			//배열을 벗어나면 그만큼 빼주기 (0부터 시작)
			cur = cur+S >=N ? (cur+S)%N : cur+S;
			//행운의 바퀴가 없다면 종료, (이미 그 자리에 다른 알파벳이 있어서 중복된다면)
			if(wheel[cur] != 0 && wheel[cur] != ch) {
				System.out.println("!");
				return;
			}
			
			wheel[cur]=ch;
		}
		
		//출력
		String res = "";
		for (int i = cur; i >= 0; i--) {
			
			if(wheel[i] == 0) {
				res+="?";
			} else if(res.contains(Character.toString(wheel[i]))) { //바퀴에 같은 글자는 두번이상 등장하지 않는다. 
				System.out.println("!");
				return;
			}
			else {
				res+=wheel[i];
			}
		}
		for (int i = N-1; i > cur; i--) {
			if(wheel[i] == 0) {
				res+="?";
			} else if(res.contains(Character.toString(wheel[i]))) { //바퀴에 같은 글자는 두번이상 등장하지 않는다. 
				System.out.println("!");
				return;
			}
			else {
				res+=wheel[i];
			}
		}
		
		System.out.println(res);
		
		
		
	}

}

 

 

728x90

+ Recent posts