세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다.
먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 맨 처음 1번 컵이 있던 위치와 같다.
세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다. 위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오.
처음엔 고정으로 1번컵에 공이 들어있다.
문제를 보자마자 든 생각이 Map 으로 풀면 간단하겠다 싶었다. 하지만 간단한 문제이니 만큼 코드를 더 간단하게 만들고 싶었다. 그래서 Map을 사용하진 않았으나 Map 형식으로 풀었다.처음에 공이 들어있는 고정 값 "1" 을 선언해주고
StringBuilder
의charAt(0)
,insert()
(혹은append()
),delete()
를 사용해서 고정 값의 숫자만 바꿔주었다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
int til = Integer.parseInt(br.readLine());
sb.append("1B");
for(int i=0; i<til; i++){
char ball = sb.charAt(0);
String str = br.readLine();
char x = str.charAt(0);
char y = str.charAt(2);
if(ball==x){
sb.deleteCharAt(0);
sb.insert(0,y);
}else if(ball==y){
sb.deleteCharAt(0);
sb.insert(0,x);
}
}
System.out.println(sb.charAt(0));
}
}