Home๊ธฐ์ˆ  & ์ฝ”๋”ฉ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๐Ÿƒ ๋ฐฑ์ค€ 2164 ํŒŒ์ด์ฌ: ์นด๋“œ2 ๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿƒ ๋ฐฑ์ค€ 2164 ํŒŒ์ด์ฌ: ์นด๋“œ2 ๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿƒ ๋ฐฑ์ค€ 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
    • ๋ฆฌ์ŠคํŠธ์—์„œ pop(0)์˜ ์—ฐ์‚ฐ์€ O(n)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ8
    • ์ด ์—ฐ์‚ฐ์„ 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)
  • ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)11
    • deque์˜ popleft()์™€ append() ์—ฐ์‚ฐ์€ ๋ชจ๋‘ O(1)7
    • ์ด ์—ฐ์‚ฐ์„ N์— ๊ฐ€๊นŒ์šด ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ O(n)11
  • N์ด ์ตœ๋Œ€ 500,000์ด๋”๋ผ๋„ ์ถฉ๋ถ„ํžˆ ์‹œ๊ฐ„ ๋‚ด์— ํ•ด๊ฒฐ ๊ฐ€๋Šฅ11

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:

  1. https://www.acmicpc.net/problem/2164
  2. https://duckgugong.tistory.com/127
  3. https://velog.io/@jeonghens/%EB%B0%B1%EC%A4%80-%EC%B9%B4%EB%93%9C2
  4. https://thebook.io/080239/0064/
  5. https://summer-0401.tistory.com/32
  6. https://blog.naver.com/ka28/222165144041
  7. https://tjddnjs.tistory.com/211
  8. https://codingdog.tistory.com/m/379?category=1055041
  9. https://tooo1.tistory.com/88
  10. https://brunch.co.kr/@@6bKU/25
  11. 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
  12. https://blog.naver.com/changkh/220674624048
  13. 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
  14. https://www.youtube.com/watch?v=RUoJt2VKGk0
  15. https://ds-student.tistory.com/193
  16. https://www.jaenung.net/tree/14626
  17. https://jamie2779.tistory.com/18
  18. https://velog.io/@minjee2758/%EB%B0%B1%EC%A4%80-2164%EB%B2%88-%EC%B9%B4%EB%93%9C2-Python-math-deque
  19. https://it-hyorim.tistory.com/58
  20. https://hyonee.tistory.com/63
  21. https://st-lab.tistory.com/188
  22. https://blog.naver.com/happynut/222843712872
  23. https://gwan9999.tistory.com/21
  24. https://blog.naver.com/tlstjd436/221635364605
  25. https://velog.io/@kupulau/%EB%B0%B1%EC%A4%80-2164-%EC%B9%B4%EB%93%9C-2
  26. https://chancoding.tistory.com/157
  27. 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
  28. https://www.acmicpc.net/problem/28039
  29. 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
  30. https://blog.naver.com/nani0843/222071035542
  31. 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
  32. https://maktubi.tistory.com/262
  33. 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
  34. 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
  35. http://web.cbnu.ac.kr/~wkkim/L51-0005_01_01.html
  36. https://www.tourismtoyota.jp/ko/events/yearly/2164-01-01/
  37. https://wellsw.tistory.com/122
  38. https://velog.io/@yoouung/Python-pop0-vs.-popleft
  39. https://imksh.com/13
  40. https://www.youtube.com/watch?v=v6qFimPvvVA

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments