반응형
N개의 상자가 있다. 거기에는 1번부터 N번까지 공이 있고 순서대로 숫자가 적혀있다.
도현이는 앞으로 M번 공을 바꾸러고 한다. 바꾸는 방법은 두 상자를 선택하여 공을 서로 교환하면 된다.
첫째 줄 N M
두번째 줄 공을 교환하는 상자안에 공
box, count = map(int, input().split())
result = [0] * box
for i in range(box):
result[i] = i+1
for j in range(count):
a, b = map(int, input().split())
result[a - 1] = b
result[b - 1] = a
for k in range(box):
print(result[k], end=" ")
주어진 숫자들에 대해 지정된 위치의 값을 서로 교환한 후 최종적으로 배열을 출력을 하는 방식을 사용하여 코드를 작성하였다.
결과: 틀림
정답
N, M = map(int, input().split())
arr = list(range(N + 1))
for _ in range(M):
i, j = map(int, input().split())
arr[i], arr[j] = arr[j], arr[i]
print(*arr[1:])
확인해보니 공을 바꾸는 방법에 문제가 있었다.
틀린 이유
1.공을 바꾸는 방법을 잘못사용하였다.
이외에도 비효율적인 코딩이 있었다.
1) result[0] * box, for i in range(box) 문은 비효율적이였다. 이는 간단하게 arr = list(range(N + 1))로 하여 간단하게 이를 표현할 수 있었다.
2) 또한 출력을 할 때에도 print(end=" ")을 사용하기 위해 for 문을 추가로 주어 비효율적으로 코딩을 하였다. 이는 그냥 print(*arr[1:])을 사용하면 되었다.
고찰
print(*arr[1:])의 의미는 무엇인가?
*은 언팩(Unpacking)연산자로 시퀀스 자료형을 함수의 인수로 개별 요소로 풀어서 전달하는 역활을 한다. 예로 들어, arr = [10, 20 , 30]일 때, print(*arr)는 print(10, 20, 30)과 같은 효과를 낸다.
arr[1:]은 arr의 1번째(컴퓨터상에서)부터 계속을 의미한다. 슬라이싱이라고 부른다.
반응형
'Coding Test (코딩 테스트)' 카테고리의 다른 글
코딩테스트 14일차(2025.01.30) - 백준3052번(나머지) (0) | 2025.01.30 |
---|---|
코딩테스트 14일차(2025.01.30) - 백준5597번(과제 안 내신 분..?) (0) | 2025.01.30 |
코딩테스트 12일차(2025.01.28) - 백준10810번(공 넣기) (0) | 2025.01.28 |
코딩테스트 12일차(2025.01.28) - 백준2562번(최댓값) (0) | 2025.01.28 |
코딩테스트 12일차(2025.01.28) - 백준10818번(최소, 최대) (0) | 2025.01.28 |