barcode

백준 10813번 풀이

BOJ/[BOJ] Python

문제

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

 

10813번: 공 바꾸기

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

www.acmicpc.net

바구니에 있는 공을 서로 바꿀건데 최종적으로 그래서 몇번 공이 들어가있는가? (리스트 스왑)

 

Reference

https://hi-datalab.tistory.com/63

 

파이썬 리스트 List 스왑 swap

파이썬 리스트에서 두 원소값 서로 바꾸기 #파이썬은 한줄로 가능 List = [3, 5] List[0], List[1] = List[1], List[0] List [5, 3] #기존 다른 언어는 temp라는 임시변수를 사용하여 값을 바꾼다 List = [3, 5] temp = Lis

hi-datalab.tistory.com

 

풀이

바구니에 공 넣는거랑 비슷한 문제다. 대신 이번에는 바구니에 공이 이미 '들어있기'때문에 배열을 만드는 방식이 좀 다르다.

 

import sys 
N, M = map(int,sys.stdin.readline().split())
basket = list(range(N))
for i in basket:
    basket[i] = 0
# 리스트를 0으로 채운다

10810번 문제는 바구니에 공을 넣는것이기때문에 빈 바구니로 시작해서 배열 안에 다 0이 들어가 있게 된다.

import sys 
N, M = map(int,sys.stdin.readline().split())
basket = list(range(N))
for i in basket:
    basket[i] = 0
# 리스트를 0으로 채운다

근데 또 이렇게 하면 1번 바구니에 0번 공이 들어가는 사상 초유의 사태가 벌어진다 이말이오.

import sys 
N, M = map(int,sys.stdin.readline().split())
basket = list(range(1,N+1))

그래서 이렇게 해줘야 바구니와 같은 번호의 공이 들어가게 된다. 가릿?

 

for i in range(M): 
    x,y = map(int, sys.stdin.readline().split())

그 다음 어떤 바구니의 공을 맞바꿀건지 입력을 받게 된다. 여기까지는 쉽죠?

 

for i in range(M): 
    x,y = map(int, sys.stdin.readline().split())
    basket[x], basket[y] = basket[y], basket[x]

파이썬은 이렇게만 하면 리스트 스왑이 된다. 되는데 문제가 있어요. 저거 저렇게 하고 예시 문제 입력하면 1번 바구니 빼고 공을 바꾸게 되는 사상 초유의 사태가 일어난다. 왜? 컴퓨터 입장에서는 0번 바구니부터거든.

for i in range(M): 
    x,y = map(int, sys.stdin.readline().split())
    basket[x-1], basket[y-1] = basket[y-1], basket[x-1]

그래서 이렇게 인덱스 번호를 입력값에서 하나씩 빼줘야 한다.

 

import sys 
N, M = map(int,sys.stdin.readline().split())
basket = list(range(1,N+1))

for i in range(M): 
    x,y = map(int, sys.stdin.readline().split())
    basket[x-1], basket[y-1] = basket[y-1], basket[x-1]

print(*basket)

참 쉽죠? 

'BOJ > [BOJ] Python' 카테고리의 다른 글

백준 27866번 풀이  (0) 2023.05.28
백준 10811번 풀이  (0) 2023.05.28
백준 10810번 풀이  (0) 2023.05.28
백준 25314번 풀이  (0) 2023.05.28
백준 11382번 풀이  (0) 2023.05.28