■ 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)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 1157번 단어 공부 문제 (0) | 2023.03.27 |
---|---|
[백준/Python] 10988번 팰린드롬인지 확인하기 문제 (0) | 2023.03.26 |
[백준/Python] 2444번 별 찍기-7 문제 (0) | 2023.03.24 |
[백준/Python] 11718번 그대로 출력하기 문제 (0) | 2023.03.24 |
[백준/Python] 5622번 다이얼 문제 (0) | 2023.03.23 |
댓글