728x90
from collections import deque
N, K = map(int, input().split())
lst = [i for i in range(N, 0, -1)]
deq = deque(lst)
lst2 = []
while len(deq) > 0:
for i in range(K - 1):
deq.appendleft(deq.pop())
lst2.append(str(deq.pop()))
print('<'+', '.join(lst2)+'>')
1 2 3 4 5 6 7 이 동그랗게 앉아있을 때 K가 3이면 +3씩 깡충 뛰기 해서 3 6 2 7 5 1 4 이런식으로 구하는것..
뭔가 큐라는 것을 생각 못했을 때에는.. 어떻게 지나간 자리를 지나갔다고 나타내지? 어렵게 느껴졌었는데
'큐'라는 힌트를 보고 나니까 K - 1만큼 뒤로 보내고 앞으로 온 수를 pop하면서 전체 큐가 빌 때까지 같은 동작을 반복하면 됐었다...
로직은 완성됐는데 시간초과가 나서 왜그런지 생각을 해보니
pop(0)을 하면 처음부터 모든 인덱스를 탐색해야 하므로 시간복잡도가 높을 것이라 예상되었다.
그래서 1234567이었던 배열을 7654321로 바꾸고 append -> appendleft / pop(0) -> pop으로 바꾸니 시간초과가 해결되었따.
이때 appendleft를 쓰기 위해 deque를 가져와서 썼다.
728x90
'알고리즘 공부(C++)' 카테고리의 다른 글
백준 1874 스택 수열 (0) | 2022.09.04 |
---|---|
백준 2417 정수 제곱근 (0) | 2022.09.03 |
백준 10816 숫자카드 2 - 딕셔너리 (0) | 2022.09.02 |
백준 1764 듣보잡 - 차집합 (0) | 2022.09.02 |
백준 2609 최소공배수 최대공약수 (0) | 2022.09.02 |