본문 바로가기
Coding Test (코딩 테스트)

코딩테스트 13일차(2025.01.29) - 백준10813번(공 바꾸기)

by BioLearner 2025. 1. 29.
반응형

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:])

 

 

 

01. 공 바꾸기[백준 10813]

# 공 바꾸기(10813) 문제 출처 : [공 바꾸기](https://www.acmicpc.net/problem/10813) 배열의 데이터를 교환하는 문제 입니다. 두 데이터를…

wikidocs.net

확인해보니 공을 바꾸는 방법에 문제가 있었다. 

 

틀린 이유

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번째(컴퓨터상에서)부터 계속을 의미한다. 슬라이싱이라고 부른다.

반응형