안경잡이 구루루

백준 10813 (공 바꾸기) [Python/파이썬] (난이도 ★★☆☆☆) 본문

파이썬(Python)/문제풀이(백준,BaekJoon)

백준 10813 (공 바꾸기) [Python/파이썬] (난이도 ★★☆☆☆)

구루루(gururu) 2023. 8. 21. 18:20
반응형

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

 

10813번: 공 바꾸기

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

www.acmicpc.net

 


나:

N, M = map(int, input().split())
baskets = list(range(1, N+1))

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

for basket in baskets:
    print(basket, end=' ')

완성된 코드는 위와 같다.

 

(1)
N, M = map(int, input().split())
baskets = list(range(1, N+1))

우선 문제에 있는대로 총 바구니 개수 N과 M번 바꿀 횟수를 공백을 기준으로 입력값을 받는다.

생성할 바구니 총 개수 baskets는 바구니 적힌 번호와 같은 1번부터 N번까지 번호로 이루어져 있어 range함수 사용. 즉 공의 번호가 바구니 번호와 같다. 대신 range() 끝의 값은 포함하지 않기 때문에 N+1을 했다.

 

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

총 M번 바꿔주고 입력했을 때 바로바로 바꿔주기 위해  for 반복문을 이용.

앞에서 바구니를 만들 때 알수 있듯이 i, j 는 각각 교환할 바구니의 위치이면서 공의번호를 의미한다.

그래서 입력받는 코드 그 밑에 위치를 서로 바꿔주는 코드를 작성할 때 리스트의 위치는 0부터 시작하는 것을 고려해서 i-1 , j-1 로 위치 설정.

 

(3)
for basket in baskets:
    print(basket, end=' ')

이후 출력값에 리스트 문양까지 출력되면 안되기 때문에 print와 end 를 이용 하나씩 출력했다.


다른사람:

ex.    https://brightnightsky77.tistory.com/77

N, M = map(int, input().split())
basket = [str(i+1) for i in range(N)]

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

print(' '.join(basekt))

완성된 코드는 위와 같다. 

나와 다르게 작성해서 주목해야 할 점은 총  두 부분으로 볼 수 있다.

 

(1)
basket = [str(i+1) for i in range(N)]

첫번째주목할 점 바구니를 만드는 과정에서 한줄로 표현하는 for문을 사용했는 점이다.

참고로 한줄 for문 구조다음과 같다.   one_line = 결과 for반복문 조건문                                                

 

(2)
print(' '.join(basekt))

두번째주목할 점최종결과 값을 출력할때 for문 사용없이 join()함수 만으로 표현한 점이다.

join()함수 '구분자',join(리스트)  구조 리스트를 문자열로 일정 구분자로 합쳐주는 함수임을 알 수 있다.

반응형