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을 제외하면?)
블로그 운영에 소흘했었는데, 앞으로는 꾸준히 작성해나가기로 내자신과 약속했다.
728x90
'코딩테스트 기록 > 04. Queue' 카테고리의 다른 글
[백준] 1966: 프린터 큐 (Pyhton) (0) | 2023.11.08 |
---|