๐ ๋ฐฑ์ค 2164๋ฒ ํ์ด์ฌ: ์นด๋2 ๋ฌธ์ ํด๊ฒฐ
https://www.acmicpc.net/problem/2164
์ด ๋ฌธ์ ๋ ํ(Queue) ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ฌธ์ ์ ๋๋ค. ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ํน์ ๊ท์น์ ๋ฐ๋ณตํ ๋, ๋ง์ง๋ง์ ๋จ๋ ์นด๋์ ๋ฒํธ๋ฅผ ๊ตฌํด์ผ ํฉ๋๋ค.
1. ๐ ๋ฌธ์ ๋ถ์
- N์ฅ์ ์นด๋๊ฐ ์์ผ๋ฉฐ, 1๋ฒ ์นด๋๊ฐ ์ ์ผ ์์, N๋ฒ ์นด๋๊ฐ ์ ์ผ ์๋์ ์์1
- ๋ค์ ๋ ๊ฐ์ง ๋์์ ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณต1:
- ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ๋ฐ๋ฅ์ ๋ฒ๋ฆผ
- ๊ทธ ๋ค์, ์ ์ผ ์์ ์๋ ์นด๋๋ฅผ ์ ์ผ ์๋๋ก ์ฎ๊น
- N์ ๋ฒ์: 1 โค N โค 500,0001
1.1. ์์ ์๋ฎฌ๋ ์ด์
N=6์ธ ๊ฒฝ์ฐ:
- ์ด๊ธฐ ์ํ:123456
- 1์ ๋ฒ๋ฆผ:23456
- 2๋ฅผ ์๋๋ก ์ฎ๊น:34562
- 3์ ๋ฒ๋ฆผ:4562
- 4๋ฅผ ์๋๋ก ์ฎ๊น:5624
- 5๋ฅผ ๋ฒ๋ฆผ:624
- 6์ ์๋๋ก ์ฎ๊น:246
- 2๋ฅผ ๋ฒ๋ฆผ:46
- 4๋ฅผ ์๋๋ก ์ฎ๊น:64
- 6์ ๋ฒ๋ฆผ:4
- ๊ฒฐ๊ณผ: 42
2. ๐งฎ ์๊ฐ ๋ณต์ก๋ ๋ถ์
2.1. ๋ฐฐ์ด(๋ฆฌ์คํธ)๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
cards = [i for i in range(1, n+1)]
while len(cards) > 1:
cards.pop(0) # ๋งจ ์ ์์ ์ ๊ฑฐ: O(n)
cards.append(cards.pop(0)) # ๋ ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋งจ ๋ค์ ์ถ๊ฐ: O(n)
- ์๊ฐ ๋ณต์ก๋: O(nยฒ)8
- N์ด ์ต๋ 500,000์ด๋ฏ๋ก O(nยฒ)์ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ์ด๊ณผ ๋ฐ์9
2.2. ๋ฑ(deque)์ ์ฌ์ฉํ ๊ฒฝ์ฐ
from collections import deque
cards = deque([i for i in range(1, n+1)])
while len(cards) > 1:
cards.popleft() # ๋งจ ์ ์์ ์ ๊ฑฐ: O(1)
cards.append(cards.popleft()) # ๋ ๋งจ ์ ์์๋ฅผ ์ ๊ฑฐํ๊ณ ๋งจ ๋ค์ ์ถ๊ฐ: O(1)
3. ๐ ๏ธ ์ต์ ํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
3.1. deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉํ๊ธฐ
from collections import deque
n = int(input())
# 1๋ถํฐ n๊น์ง์ ์นด๋๋ฅผ ๋ฑ์ ์ด๊ธฐํ
cards = deque([i for i in range(1, n+1)])
# ์นด๋๊ฐ ํ ์ฅ ๋จ์ ๋๊น์ง ๋ฐ๋ณต
while len(cards) > 1:
cards.popleft() # ๋งจ ์ ์นด๋ ๋ฒ๋ฆฌ๊ธฐ
cards.append(cards.popleft()) # ๊ทธ ๋ค์ ์นด๋๋ฅผ ๋งจ ์๋๋ก ์ฎ๊ธฐ๊ธฐ
# ๋จ์ ์นด๋ ์ถ๋ ฅ
print(cards[0])
- deque๋ ์๋ฐฉํฅ ํ๋ก, ์์ชฝ ๋์์ ํจ์จ์ ์ผ๋ก ์์๋ฅผ ์ถ๊ฐ/์ ๊ฑฐํ ์ ์์37
- deque.popleft() ์ฐ์ฐ์ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง7
- deque๋ ๋ด๋ถ์ ์ผ๋ก ์ํ ํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ํฌ์ธํฐ ์กฐ์ ๋ง์ผ๋ก ์ฝ์ /์ญ์ ๊ฐ ๊ฐ๋ฅ7
3.2. deque vs Queue
- collections.deque๊ฐ queue.Queue๋ณด๋ค ํจ์ฌ ๋น ๋ฆ8
- Queue๋ ์ค๋ ๋ ์์ ์ ์ํ ๋ฝ(lock) ๋ฉ์ปค๋์ฆ์ด ์์ด ์ค๋ฒํค๋๊ฐ ๋ฐ์8
- ๋จ์ผ ์ค๋ ๋ ํ๊ฒฝ์์๋ deque๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ 8
4. ๐ป ์คํ ๊ณผ์ ์๊ฐ์ ํํ
N=4์ธ ๊ฒฝ์ฐ:
text์ด๊ธฐ ์ํ: [1, 2, 3, 4]
1์ ๋ฒ๋ฆผ: [2, 3, 4]
2๋ฅผ ์๋๋ก ์ฎ๊น: [3, 4, 2]
3์ ๋ฒ๋ฆผ: [4, 2]
4๋ฅผ ์๋๋ก ์ฎ๊น: [2, 4]
2๋ฅผ ๋ฒ๋ฆผ: [4]
์ต์ข
๊ฒฐ๊ณผ: 4
5. ๐ ๊ฒฐ๋ก
- ์ด ๋ฌธ์ ๋ ์๋ฃ๊ตฌ์กฐ์ ํน์ฑ์ ์ดํดํ๊ณ ์ ์ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํจ
- ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํด์ผ ํจ6
- ์ผ๋ฐ ๋ฆฌ์คํธ ๋์ deque๋ฅผ ์ฌ์ฉํ๋ฉด O(nยฒ)์์ O(n)์ผ๋ก ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ ํ ์ ์์211
- ์ปดํจํฐ ๊ณผํ์์ ์๋ฃ๊ตฌ์กฐ์ ์ ํ์ด ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ์ผ๋ง๋ ํฐ ์ํฅ์ ๋ฏธ์น๋์ง ๋ณด์ฌ์ฃผ๋ ์ข์ ์์์
Citations:
- https://www.acmicpc.net/problem/2164
- https://duckgugong.tistory.com/127
- https://velog.io/@jeonghens/%EB%B0%B1%EC%A4%80-%EC%B9%B4%EB%93%9C2
- https://thebook.io/080239/0064/
- https://summer-0401.tistory.com/32
- https://blog.naver.com/ka28/222165144041
- https://tjddnjs.tistory.com/211
- https://codingdog.tistory.com/m/379?category=1055041
- https://tooo1.tistory.com/88
- https://brunch.co.kr/@@6bKU/25
- https://velog.io/@jw9603/%ED%81%90-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%EB%AC%B8%EC%A0%9C-TIL-%EC%B9%B4%EB%93%9C2-%EB%B0%B1%EC%A4%80-2164%EB%B2%88
- https://blog.naver.com/changkh/220674624048
- https://goalsdhkdwk.tistory.com/entry/BOJ%EB%B0%B1%EC%A4%80-2164%EB%B2%88-%EC%B9%B4%EB%93%9C2-c-%ED%92%80%EC%9D%B4
- https://www.youtube.com/watch?v=RUoJt2VKGk0
- https://ds-student.tistory.com/193
- https://www.jaenung.net/tree/14626
- https://jamie2779.tistory.com/18
- https://velog.io/@minjee2758/%EB%B0%B1%EC%A4%80-2164%EB%B2%88-%EC%B9%B4%EB%93%9C2-Python-math-deque
- https://it-hyorim.tistory.com/58
- https://hyonee.tistory.com/63
- https://st-lab.tistory.com/188
- https://blog.naver.com/happynut/222843712872
- https://gwan9999.tistory.com/21
- https://blog.naver.com/tlstjd436/221635364605
- https://velog.io/@kupulau/%EB%B0%B1%EC%A4%80-2164-%EC%B9%B4%EB%93%9C-2
- https://chancoding.tistory.com/157
- https://letzgorats.tistory.com/entry/%EB%B0%B1%EC%A4%80%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98pythonjava-2164%EB%B2%88-%EC%B9%B4%EB%93%9C2
- https://www.acmicpc.net/problem/28039
- https://velog.io/@limelimejiwon/Python-Stack-%EA%B5%AC%ED%98%84-list%EC%99%80-deque-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90
- https://blog.naver.com/nani0843/222071035542
- https://san-tiger.tistory.com/entry/%EB%B0%B1%EC%A4%80-2164%EB%B2%88-%EC%B9%B4%EB%93%9C-%EA%B2%8C%EC%9E%84
- https://maktubi.tistory.com/262
- https://codingdog.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%98-listpop0%EC%9D%84-%EC%93%B0%EB%A9%B4-%EC%95%88-%EB%90%98%EB%82%98%EC%9A%94
- https://velog.io/@mpfo0106/%ED%8C%8C%EC%9D%B4%EC%8D%AC-deque-vs-list-%EC%84%B1%EB%8A%A5%EC%B0%A8%EC%9D%B4
- http://web.cbnu.ac.kr/~wkkim/L51-0005_01_01.html
- https://www.tourismtoyota.jp/ko/events/yearly/2164-01-01/
- https://wellsw.tistory.com/122
- https://velog.io/@yoouung/Python-pop0-vs.-popleft
- https://imksh.com/13
- https://www.youtube.com/watch?v=v6qFimPvvVA