문제

 

내가 작성한 코드 (틀림)
import sys
input = sys.stdin.readline
from collections import deque

# N, K 입력
n, k = map(int, input().split())
queue = deque([i for i in range(1, n +1)])
cnt = 0
result = []

while queue:
    cnt += 1
    if cnt == k:
        result.append(queue.popleft())
    else:
        queue.append(queue.popleft())

> 흠... 이건 맞췄어야 됐는디... ㅜㅜ

> 화이팅!!

 

참고한 코드
from collections import deque

queue = deque()
answer = []

n, k = map(int, input().split())

for i in range(1, n+1):
    queue.append(i)

while queue:
    for i in range(k-1):
        queue.append(queue.popleft())
    answer.append(queue.popleft())

print("<",end='')
for i in range(len(answer)-1):
    print("%d, "%answer[i], end='')
print(answer[-1], end='')
print(">")

> 참고한 블로그

https://hongcoding.tistory.com/41

 

[백준] 11866번 요세푸스 문제 0 (Python 파이썬)

www.acmicpc.net/problem/11866 11866번: 요세푸스 문제 0 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000) www.acmicpc.net 문제 설명 1번부터 N번까지 N명의 사람이 원을 이..

hongcoding.tistory.com

내가 해석한 코드 설명
from collections import deque

queue = deque()
answer = []

> 큐 함수를 사용하기 때문에 deque 모듈을 불러오고 queue 변수에 deque 함수를 사용하였고, answer는 최종 결과를 추출하기 위한 변수입니다.

 

n, k = map(int, input().split())

for i in range(1, n+1):
    queue.append(i)

> n, k는 입력될 변수를 받기 위한 map(int, input().split()) 로 코드를 작성하였습니다.

> 반복문을 사용하여 n개의 길이만큼 queue 변수의 값을 받는 것입니다.

> 저는 틀렸었지만 위와 같은 방식이 아니라, list compression 방법을 적용하였습니다.

 

while queue:
    for i in range(k-1):
        queue.append(queue.popleft())
    answer.append(queue.popleft())

> while문을 사용하여 queue의 값이 존재할 때까지 반복문을 진행하는 것입니다. 이렇게 하는 이유는 k번째 데이터를 추출해야하기 때문입니다.

> 여기서는 for문을 사용하여 k번째전까지 데이터를 popleft() 함수를 사용하여 내보내는 동시에 append 함수를 사용하여 다시 queue 변수에 넣는 작업을 하였습니다.

> 다시 for문을 빠져나와 answer 변수에 k번째 값을 popleft() 함수로 queue 변수에 빼준 후 append 함수로 answer 변수에 원하는 값을 넣는 작업을 하는 것입니다.

> 저는 cnt 변수를 사용하여 k번째 값이 되는 것을 확인하기 위한 변수를 만들었었는데, 이 방법이 더 좋은 거 같습니다!! 

 

print("<",end='')
for i in range(len(answer)-1):
    print("%d, "%answer[i], end='')
print(answer[-1], end='')
print(">")

> 솔직히 이 작업을 어떻게 해야할지 모르겠어서.. .포기했었는데 ㅜㅜ

> print("<", end='') 작업을 통해 print로 다음 칸으로 넘어가는 것이 아닌 계속 그 줄에 있기 위해 end = '' 로 적용해주었습니다.

> 그리고 반복문을 사용하여 k번째 값들의 모음인 answer 변수를 print("d, "%anser[i], end=' ) 로 코드를 작성하였습니다.

매우 좋은 반복인 거 같다!! %를 활용하여 쉽게 print 할 수 있는 것!!

 

+ Recent posts