코딩테스트 기록/04. Queue

[백준] 11866: 요세푸스 문제 0 (Python)

박세류 2023. 11. 8. 17:40
 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

 

문제보고 이게 먼소린가 싶다냐.. 해서 그려보았다.

문제 분석할때 종이에 슥슥 써보는건 좋은습관인거 같다.

 

직접 그려본 문제

이렇게 그려보니까 무슨 문제인지 바로 파악이 되었다.( 악필 죄송 합니다 ) 

그리고 이 문제를 해결하기 위해선 큐를 사용하는게 효율적이라는 것도 깨닫게 되었다.

이상한 그림 죄송합니다

큐를 사용해서 K와 다른 숫자는 다시 뒤로 append하고, 그 수만 pop한다음에 리스트에 추가하면 수열이 완성되는 방식이었다. FIFO인 큐 자료구조를 문제에 해결방식으로 떠올려서 그걸 이용해 문제를 해결하는게 핵심이었던거 같다. 

 

 

from collections import deque


def solution(N, K):
    queue = deque()
    answer = list()

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

    count = 0

    while N > len(answer):
        count += 1
        pl = queue.popleft()
        if count == K:
            count = 0
            answer.append(pl)
        else:
            queue.append(pl)

    return answer


N, K = map(int, input().split())
sun = solution(N, K)
print('<', end='')
for i in range(len(sun)):
    if i == len(sun) - 1:
        print(sun[i], end='')
    else:
        print(sun[i], end=', ')
print('>', end='')

 

사담으로, 백준을 풀떄도 프로그래머스 형식처럼 풀려고 방향을 잡았다. 기업의 코테들은 대개 프로그래머스를 이용해서 하는 방식이 많기 때문이다.(삼성 등 자체 OJ Platform을 제외하면?)

 

블로그 운영에 소흘했었는데, 앞으로는 꾸준히 작성해나가기로 내자신과 약속했다. 

반응형

'코딩테스트 기록 > 04. Queue' 카테고리의 다른 글

[백준] 1966: 프린터 큐 (Pyhton)  (0) 2023.11.08