망나니 AWOS의 일상
article thumbnail

문제 풀이

문제에서 N=4인 경우에 버린 카드는 1 3 2가 되고 남는 카드는 4가 되어 출력 결과가 1 3 2 4가 되길래 짝수 홀수로 나누면 될 줄 알았다.

 

하지만 테스트 케이스 1번에서 출력 결과가 1 3 5 7 4 2 6이 되는 것에 대해서 도무지 이해가 안 되어 결국 그림을 그려 이해를 하고 어떻게 하면 풀 수 있을지를 알아냈다.

cnt 값에 따라서 값을 pop 하거나 뒤로 보내는 작업 가능

그림에서와 같이 cnt 값에 따라서의 2가지의 작업을 돌리면 되었다.

1. cnt가 홀수면 첫 번째 원소 값을 원래 리스트에서 pop 하고 다른 리스트에 append

2. cnt가 짝수면 첫 번째 원소 값을 원래 리스트에 append 하고 원래 리스트에서 첫 번째 위치에 있는 원소 값을 pop

 

대부분의 사람들은 데크(dequeue)로 푸셨던데 아직 본인은 쓸 줄 몰라 리스트로 구현하였다.

 

리스트에 값이 있을 때까지 돌려야하는 이유는

위의 1번과 2번 항목을 보면 pop 작업이 있는데 원소가 비어있다면 오류를 발생시키므로 리스트에 값이 들어 있을 때까지만 반복문을 실행시키면 된다.

 

나머지는 차근 차근 생각해보면 될 것 같다.

 

완성된 코드!!😊👍

l = [i for i in range(1, int(input())+1)]
result = []
cnt = 1
while l:
    if cnt % 2 == 0:
        l.append(l[0])
        l.pop(0)
    else:
        result.append(l[0])
        l.pop(0)
    cnt += 1

print(' '.join(map(str, result)))

 

profile

망나니 AWOS의 일상

@AWOS

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!