시간복잡도
를 고려할 것ex) N = 6
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 2]
[4, 5, 6, 2]
[5, 6, 2, 4]
[2, 4, 6]
[6, 4]
[4]
1번 과정. 맨 앞의 값을 삭제(삭제
)
2번 과정. 맨 앞의 값(삭제
)을 맨 뒤로 보내기(삽입
)
from collections import deque
dq = deque()
N = int(input())
for i in range(1, N+1):
dq.append(i)
from collections import deque
N = int(input())
dq = deque(range(1, N+1))
from collections import deque
dq = deque()
N = int(input())
for i in range(1, N+1):
dq.append(i)
while len(dq) > 1:
dq.popleft()
dq.popleft()
dq.pop()
from collections import deque
dq = deque()
N = int(input())
for i in range(1, N+1):
dq.append(i)
while len(dq) > 1:
dq.popleft()
dq.append(dq.popleft())
print(dq.popleft())
dq.append()
의 인자로 가장 앞 원소를 삭제하는 동시에 리턴하는 dq.popleft()
를 넣어줌 dq.popleft()
의 리턴 값을 출력 N = int(input())
arr = []
for i in range(1, N+1):
arr.append(i)
while len(arr) > 1:
arr.pop(0)
arr.append(arr.pop(0))
print(arr.pop())
N = int(input())
arr = [*range(1, N+1)]
while len(arr) > 1:
arr.pop(0)
arr.append(arr.pop(0))
print(arr.pop())
전날 풀었던 9012번을 바탕으로 문제 풀이에 적합한 자료구조 선정 & 시간복잡도의 고려를 1순위로 두고 문제를 해결했다.
알고리즘 준비를 거진 몇년만에 해서 감이라는게 하나도 없었는데 맞아서 기분이 아주 좋았다 ... 😆
큐를 사용해 코드를 작성할 때, 본인은 dq.append(dq[0])
으로 풀이하였으나 자료구조로 큐
를 사용한다는 점에서
적합한 코드 작성은 아니었다고 판단된다.
→ 인덱스로 접근하는 것은 큐보다는 배열 자료구조에 적합하다고 볼 수 있으며,
dq.append(dq[0])
dq.popleft()
코드를 위와 같이 삽입한 뒤 삭제하는 로직으로 구현하였기에 가독성 측면에서 좋다고 판단되지는 않기 때문이다.
deque
에서 사용할 수 있는 함수에 대한 지식이 없다.
python에서 자료구조별로 사용할 수 있는 메소드와 인스턴스를 확인하고 암기해
검색이 불가능한 환경에서도 문제풀이가 가능하도록 연습이 필요할 것 같다.