BOJ 1547

2020-04-25

위 문제는 백준 사이트의 알고리즘 14503 문제에 관한 설명입니다.


문제

세준이는 컵 3개를 탁자위에 일렬로 놓았다.

컵의 번호는 가장 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다.

먼저 1번컵의 아래에 공을 하나 넣는다.

세준이는 두 컵을 고른 다음, 그 위치를 바꾸려고 한다.

예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다.

위치를 바꿀 때, 컵을 먼저 들고 이동해야 한다. 따라서, 공의 위치는 가장 처음 1번컵이 있던 위치와 같다.

세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다.

위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다.

둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것을 의미한다.

컵을 이동시키는 중에 공이 컵에서 빠져나오는 경우는 없다. X와 Y의 값은 3보다 작거나 같고, X와 Y가 같을 수도 있다.

출력

첫째 줄에 공이 들어있는 컵의 번호를 출력한다. 공이 사라져서 컵 밑에 없는 경우에는 -1을 출력한다.

import java.util.*;

public class Ball {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int M = scanner.nextInt();
        int point = 1;
        for (int i = 0; i < M; i++) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            if (a == point)
                point = b;
            else if (b == point)
                point = a;
        }
        System.out.println(point);
    }
}
#include <iostream>
using namespace std;

int main(){
	int size, point = 1;
	cin >> size;
	
	for (int i = 0; i < size; i++){
		int a, b;
		cin >> a >> b;
		if (a == point) point = b;
		else if (b == point) point = a;
	}
	cout << point;
}
 

C++로 푼 것

처음엔 배열에 0과 1로 공이 있고 없음을 정한 후 1이 있는 배열방만 뽑으면 된다 생각했는데

필요 없었습니다.

오히려 그냥 공이 있는 컵의 값만 가지고 있으면 되기 때문에 옮겨진 결과가 어디인지만 판별하면 됩니다.

막대기