본문 바로가기
코딩 테스트/Python_백준

[백준/Python] 10812번 바구니 순서 바꾸기

by 모두의 케빈 2023. 3. 25.

■ 10812번 바구니 순서 바꾸기

 

출처: 백준 10812번 바구니 순서 바꾸기 문제

 

■ 코드 풀이

 

두 가지 방법으로 풀어보겠습니다. 먼저 아래는 제가 처음에 작성한 코드입니다. 첫 번째 바구니일 때와 아닐 때를 if문을 활용하여 구분했습니다.

그런데 코드를 어찌 저찌 다 작성하고 제출했더니, 너무 지저분하고 비효율적이라는 생각이 들었습니다. 분명 다른 고수들의 코드가 있겠다 싶었습니다. 그래서 찾아보니 아래와 같은 코드가 있더군요.

import sys

N,M = map(int, sys.stdin.readline().split())

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

for n in range(M):
    i,j,k = map(int, sys.stdin.readline().split())
    
    if (i-1) == 0:
        temp = basket[k-1:j] + basket[:k-1] + basket[j:]
    
    temp = basket[:i-1] + basket[k-1:j] + basket[i-1:k-1] + basket[j:]

    basket = temp


for _ in temp:
    print(_, end = " ")

 

list의 바꾸고 싶은 부분만 slicing 해서 값을 바꿔줄 수 있습니다. print 할 때는 unpacking(*)을 활용해서 코드 길이가 훨씬 줄어들었네요! 소요 시간도 44ms에서 40ms로 10% 정도 향상되었습니다. 오늘도 새롭게 배웠네요.

참고로, 이런 index 문제를 풀 때 많이 헷갈리시는 분들은 i, j, k를 입력받은 다음 그냥 i = i-1, j = j-1 이렇게 1씩 빼서 업데이트해 버리면 코드를 푸는데 수월할 것 같습니다.

import sys

N, M = map(int, sys.stdin.readline().split())
basket = [i for i in range(1,N+1)]

for m in range(M) :
    i, j, k = map(int, sys.stdin.readline().split())
    basket[i-1:j] = basket[k-1:j] + basket[i-1:k-1]

print(*basket)

 

댓글