2학년 2학기 알고리즘 과제_7주차(백준_1547번:공)

2024. 11. 24. 14:46Algorithm ( p & swlug )/Baekjoon

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을 출력한다.

 

 

 

📌 문제 풀이 (내생각 & 기타)

 

일단 세준이가 컵세개를 놓아져있고, x번 컵과 y번 컵의 위치를 바꾸면서 비교를 하니까 이를 변수로 둔다.

먼저 1번 컵아래에 공을 넣고 세준이가 두컵을 고르고 그 위치를 바꾸는데 그 컵이 각각 x, y로 두면 될 것 같고, 1번과 2번 컵을 골랐을 때, 1번 컵이 있던 위치에 2번 컵을 이동시키고 2번 컵이 있던 위치에 1번 컵을 이동시키는 즉, 두개의 자리를 바꾸는? 행위인 것 같다.

일단 공이 이동할 횟수를 n으로 입력받는다, 그리고 ball을 1로 초기위치를 초기화해두고 반복을 통해서 공이 x 위치에 있으면 ball = y로 이동하고, 공이 y 위치에 있으면 ball = x로 이동하도록 한다.

 

📌  코드 분석

 

n = int(input())
ball = 1

for _ in range(n):
    x, y = map(int, input().split())
    if x == ball:
        ball = y
    elif y == ball:
        ball = x

print(ball)

 

코드 분석도 위에 문제 풀이와 거의 동일하다.

 

📌  느낀점

 

해당 문제도 약간의 힌트는 얻었지만, 비교적 수월하게 풀 수 있었다.

마지막 주차 문제는 상대적으로 쉬웠다는 생각이..! 

2학년 학회 활동도 이렇게 끝이났다. 

앞으로 알고리즘 문제를 더 제대로 공부해야겠다는 생각이 드는 한학기였다.!

 

 

 

[ 참고 자료 ]

 

백준 1547. 공 Python 파이썬 풀이

 

백준 1547. 공 Python 파이썬 풀이

문제 문제 링크 https://www.acmicpc.net/problem/1547 풀이 코드 n = int(input()) ball = 1 for _ in range(n): x, y = map(int, input().split()) if x == ball: ball = y elif y == ball: ball = x print(ball)

swimming-penguin.tistory.com