[Python]백준_1547 : 공

Alal11·2022년 8월 28일
1
post-thumbnail

출처

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


문제

세준이는 컵 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을 출력한다.


예제 입출력


알고리즘 분류

  • 구현
  • 시뮬레이션

➡️문제 분석

  • 1번, 2번, 3번 컵이 일렬로 있을 때, 공의 위치는 1번 컵 위치로 고정이다.

  • 컵의 번호 2개를 골랐을 때, 그 컵들의 위치를 서로 바꾼다.

  • 컵의 위치를 M번 반복해서 바꾸고 난 이후에 공이 들어있는 컵의 번호를 구한다.


➡️코드(⭕)

M = int(input()) 							# 컵의 위치를 바꿀 횟수 입력

cups = [1, 2, 3] 							# 1번, 2번, 3번 컵 리스트

for _ in range(M):							# M번 반복
  x, y = map(int, input().split()) 			# x, y 값 입력 받기

  c1 = cups.index(x) 						# x의 인덱스 가져오기
  c2 = cups.index(y) 						# y의 인덱스 가져오기

  cups[c1], cups[c2] = cups[c2], cups[c1] 	# 컵 위치 바꾸기

print(cups[0]) 								# 공이 들어있는 컵번호 출력

➡️코드 분석

  1. 공의 위치를 바꿀 횟수인 M을 입력하고, cups 리스트에 컵의 번호 1, 2, 3을 넣는다.

  2. for문으로 M번 반복한다.

    • 컵의 위치를 바꿀 컵 번호 x, y를 입력한다.

    • x와 y의 인덱스, 즉 x, y의 위치를 c1, c2에 대입한다.

    • c1과 c2를 바꿔서 컵의 위치를 바꾼다.

  3. 공의 위치는 맨 처음 1번 컵 자리에 고정이므로, cups[0] 위치에 있는 컵의 번호를 출력한다.


➡️end

출력 부분에서 -1은 뭔가 싶어서 검색해봤더니 함정이라고 한다..!
공이 사라질 수가 없기 때문에...
문제에 함정도 있다니 충격❗

0개의 댓글