알고리즘 문제(SOL)

[백준/1547/파이썬] 공

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

 

1547번: 공

첫째 줄에 컵의 위치를 바꾼 횟수 M이 주어지며, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 컵의 위치를 바꾼 방법 X와 Y가 주어지며, X번 컵과 Y번 컵의 위치를 서로 바꾸는 것

www.acmicpc.net

Problem

  • 세준이는 컵 3개를 탁자 위에 일렬로 엎어놓았다. 컵의 번호는 맨 왼쪽 컵부터 순서대로 1번, 2번 3번이고, 세준이는 이 컵을 이용해서 게임을 하려고 한다.
  • 세준이는 컵의 위치를 총 M번 바꿀 것이며, 컵의 위치를 바꾼 방법이 입력으로 주어진다. 위치를 M번 바꾼 이후에 공이 들어있는 컵의 번호를 구하는 프로그램을 작성하시오.

조건

  • 먼저 1번 컵의 아래에 공을 하나 넣는다. 세준이는 두 컵을 고른 다음, 그 위치를 맞바꾸려고 한다. 예를 들어, 고른 컵이 1번과 2번이라면, 1번 컵이 있던 위치에 2번 컵을 이동시키고, 동시에 2번 컵이 있던 위치에 1번 컵을 이동시켜야 한다. 이때 공은 움직이지 않기 때문에, 공의 위치는 맨 처음 1번 컵이 있던 위치와 같다.

SOL

 

CupAndBall이라는 야바위게임을 컴퓨터로 구현하는 문제이다! 간단하다. 1번에 공이 들어있고, 바꿀 위치가 입력되면, 공을 옮겨도되고, 컵을 옮겨도된다. (이 문제에서는 컵을 옮긴다고 개념적으로 표현하였다)

사실, 공을 2번으로 옮기는 거나, 공이 있는 위치에 2번 컵을 씌우는거나 똑같다. (행동은 같지않겠지만, 데이터상으로는 차이가 없다)

 

#공,야바위
import sys
input= sys.stdin.readline
CupAndBall=[0 for _ in range(4)]
CupAndBall[1]=1
N=int(input().rstrip())

for i in range(N):
    a,b=map(int,input().split())
    CupAndBall[a],CupAndBall[b]=CupAndBall[b],CupAndBall[a]

for k in range(len(CupAndBall)):
    if CupAndBall[k]:
        print(k)
        break