문제 출처: https://www.acmicpc.net/problem/20361
문제
전설의 야바위꾼 일우는 Shell Game으로 야바위를 한다. Shell Game은 다음과 같은 절차로 진행된다.
진행자가 N개의 컵을 일렬로 놓고, 그 중 X번째 컵에 공을 숨겨둔다.
임의의 서로 다른 두 컵의 위치를 맞바꾼다. 이 항목을 K번 수행한다. 만약, 공을 숨겨둔 컵을 움직인다면 공도 그 컵을 따라서 움직인다.
참가자는 몇 번째 컵에 공이 숨겨져 있는지 추측한다.
그 컵에 공이 숨겨져 있다면 참가자가, 그렇지 않다면 진행자가 이긴다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws Exception {
// 입력을 얻기 위한 reader
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// 종이컵의 수, 간식 위치, 바꾸는 횟수를 얻기 위한 StringTokenizer
StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
int N = Integer.parseInt(tokenizer.nextToken()); // 종이컵의 수
int X = Integer.parseInt(tokenizer.nextToken()); // 간식 위치
int K = Integer.parseInt(tokenizer.nextToken()); // 위치를 바꾼 횟수
int[] paperCup = new int[N]; // 종이컵 정보 배열
for (int i = 0; i < paperCup.length; i++) {
paperCup[i] = i + 1; // 1부터 N까지 수를 채워넣는다.
}
// K개의 줄에서 바꾼 두 컵의 위치를 받아온다.
for (int i = 0; i < K; i++) {
tokenizer = new StringTokenizer(reader.readLine()); // StringTokenizer 설정
int from = Integer.parseInt(tokenizer.nextToken()) - 1; // 시작(0-인덱스이므로 -1)
int to = Integer.parseInt(tokenizer.nextToken()) - 1; // 시작(0-인덱스이므로 -1)
swap(paperCup, from, to); // 두 컵의 위치 교환
}
for (int i = 0; i < paperCup.length; i++) {
if (paperCup[i] == X) { // 간식을 찾을 경우(1부터 N까지 처음에 넣었으므로 X를 찾으면 된다.)
System.out.println(i + 1);
break;
}
}
}
// 배열의 두 원소를 교환하는 메서드
private static void swap(int[] target, int from, int to) {
int temp = target[from]; // from 인덱스의 값 저장
target[from] = target[to]; // to 인덱스의 값을 from 인덱스에 저장
target[to] = temp; // to 인덱스에 미리 저장해둔 temp 저장
}
}