[백준] 공 바꾸기(Python - 10813번)

규갓 God Gyu·2024년 12월 25일

백준

목록 보기
85/96

문제

도현이는 바구니를 총 N개 가지고 있고, 각각의 바구니에는 1번부터 N번까지 번호가 매겨져 있다. 바구니에는 공이 1개씩 들어있고, 처음에는 바구니에 적혀있는 번호와 같은 번호가 적힌 공이 들어있다.

도현이는 앞으로 M번 공을 바꾸려고 한다. 도현이는 공을 바꿀 바구니 2개를 선택하고, 두 바구니에 들어있는 공을 서로 교환한다.

공을 어떻게 바꿀지가 주어졌을 때, M번 공을 바꾼 이후에 각 바구니에 어떤 공이 들어있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N (1 ≤ N ≤ 100)과 M (1 ≤ M ≤ 100)이 주어진다.

둘째 줄부터 M개의 줄에 걸쳐서 공을 교환할 방법이 주어진다. 각 방법은 두 정수 i j로 이루어져 있으며, i번 바구니와 j번 바구니에 들어있는 공을 교환한다는 뜻이다. (1 ≤ i ≤ j ≤ N)

도현이는 입력으로 주어진 순서대로 공을 교환한다.

출력

1번 바구니부터 N번 바구니에 들어있는 공의 번호를 공백으로 구분해 출력한다.

예제 입력 1

5 4
1 2
3 4
1 4
2 2

예제 출력 1

3 1 4 2 5

오랜만에 다시 풀려고하니 js기반인 나는 파이썬이 누구세요?하는 느낌이 들정도로 출력값 나타내는 print도 기억이 안나고 5 4를 넣었을때 인풋값 받는 명령어도 어떻게 적어야할지 백지상태가 되었다.. 공부 좀만 쉬어도 안된다고 백지준비상태여서 백준인건가..? 규하하하ㅏ

서론은 이정도면 되었고, 문제를 풀어보자면
첫 인풋값에 N은 바구니와 공의 개수
M은 M번 공의 위치를 바꾸겠다는 의미

그래서 map을 통해 int화시킨 input값을 split을 통해 띄어쓰기 없이 변수에 담아주었고,

요소를 하나하나 돌려야하기에 list에 범위를 1부터 N+1까지 설정해서 담아주었다.
그 이유는 공의 번호도 중요하기에

그 다음에 for _ in range(M) 반복문을 통해 그 다음줄부터 공의 번호를 담는
i와 j로 똑같이 input값을 받아내었고,
이후 해당 위치의 공번호를 반대로 변경해주어서 list에 대해서 새로 만들게 되었다.

하나하나 다시 적어보니 기억은 난다만 아예 풀때 자신이 없다고 느껴진게 무섭다 ㄷㄷ

최종 코드

N, M = map(int, input().split())

baskets = list(range(1, N+1))

for _ in range(M):
    i, j = map(int, input().split())
    baskets[i-1], baskets[j-1] = baskets[j-1], baskets[i-1]
    
print(baskets)

인줄 알았지? 근데 결과값을 리스트 즉 배열로 출력시켰는데

자세히 보면 그냥 문자열로 출력시켜야되었다

그래서 join을 사용하여 리스트의 값들을 빼내야 했는데

이것도 오랜만에 사용하니 생각이 잘 안나게되었다

일단 map으로 반복적으로 str화 시켜주는데 그 해당 사항은 baskets다

그리고 ' '.join을 이용하여 각 요소를 공백으로 구분을 시켜서 하나의 문자열로 결합시킨다. 즉, [5,4,3,2,1]이있다면 공백을 추가해줘야 요소 하나당 띄어쓰기를 적용시켜서 문자열로 만들 수 있다는 의미!!

찐찐찐찐 최종 코드

N, M = map(int, input().split())

baskets = list(range(1, N+1))

for _ in range(M):
    i, j = map(int, input().split())
    baskets[i-1], baskets[j-1] = baskets[j-1], baskets[i-1]

result = ' '.join(map(str, baskets))    
print(result)
profile
웹 개발자 되고 시포용

0개의 댓글