์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 14226 ๐Ÿฅ‡] ์ด๋ชจํ‹ฐ์ฝ˜

1eehyunji 2023. 10. 16. 21:06

https://www.acmicpc.net/problem/14226

 

14226๋ฒˆ: ์ด๋ชจํ‹ฐ์ฝ˜

์˜์„ ์ด๋Š” ๋งค์šฐ ๊ธฐ์˜๊ธฐ ๋•Œ๋ฌธ์—, ํšจ๋นˆ์ด์—๊ฒŒ ์Šค๋งˆ์ผ ์ด๋ชจํ‹ฐ์ฝ˜์„ S๊ฐœ ๋ณด๋‚ด๋ ค๊ณ  ํ•œ๋‹ค. ์˜์„ ์ด๋Š” ์ด๋ฏธ ํ™”๋ฉด์— ์ด๋ชจํ‹ฐ์ฝ˜ 1๊ฐœ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค. ์ด์ œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ ์ด๋ชจํ‹ฐ์ฝ˜์„ S๊ฐœ ๋งŒ

www.acmicpc.net

๋ฌธ์ œ

์˜์„ ์ด๋Š” ๋งค์šฐ ๊ธฐ์˜๊ธฐ ๋•Œ๋ฌธ์—, ํšจ๋นˆ์ด์—๊ฒŒ ์Šค๋งˆ์ผ ์ด๋ชจํ‹ฐ์ฝ˜์„ S๊ฐœ ๋ณด๋‚ด๋ ค๊ณ  ํ•œ๋‹ค.

์˜์„ ์ด๋Š” ์ด๋ฏธ ํ™”๋ฉด์— ์ด๋ชจํ‹ฐ์ฝ˜ 1๊ฐœ๋ฅผ ์ž…๋ ฅํ–ˆ๋‹ค. ์ด์ œ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ 3๊ฐ€์ง€ ์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•ด์„œ ์ด๋ชจํ‹ฐ์ฝ˜์„ S๊ฐœ ๋งŒ๋“ค์–ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

  1. ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•ด์„œ ํด๋ฆฝ๋ณด๋“œ์— ์ €์žฅํ•œ๋‹ค.
  2. ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ™”๋ฉด์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•œ๋‹ค.
  3. ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

๋ชจ๋“  ์—ฐ์‚ฐ์€ 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค. ๋˜, ํด๋ฆฝ๋ณด๋“œ์— ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ณต์‚ฌํ•˜๋ฉด ์ด์ „์— ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋˜ ๋‚ด์šฉ์€ ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ๋œ๋‹ค. ํด๋ฆฝ๋ณด๋“œ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ์—๋Š” ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ผ๋ถ€๋งŒ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๋˜ํ•œ, ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ์ค‘ ์ผ๋ถ€๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. ํ™”๋ฉด์— ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•˜๋ฉด, ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ™”๋ฉด์— ์ถ”๊ฐ€๋œ๋‹ค.

์˜์„ ์ด๊ฐ€ S๊ฐœ์˜ ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ™”๋ฉด์— ๋งŒ๋“œ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— S (2 ≤ S ≤ 1000) ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ด๋ชจํ‹ฐ์ฝ˜์„ S๊ฐœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

import sys
from collections import deque

s=int(sys.stdin.readline())

# init queue
queue=deque()
# ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜, ํด๋ฆฝ๋ณด๋“œ์— ์ €์žฅ๋œ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜, ์†Œ์š” ์‹œ๊ฐ„
queue.append((1, 0, 0))
# ๋ฐฉ๋ฌธ ํ‘œ์‹œ
visited=set((1,0,0))

while queue:
    m, c, t = queue.popleft()
    if m==s:
        print(t)
        break
    # 1) ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•ด์„œ ํด๋ฆฝ๋ณด๋“œ์— ์ €์žฅ
    if m>0 and (m, m, t+1) not in visited:
        queue.append((m, m, t+1))
        visited.add((m, m, t+1))
    # 2) ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ™”๋ฉด์— ๋ถ™์—ฌ๋„ฃ๊ธฐ
    if c>0 and (m+c, c, t+1) not in visited:
        queue.append((m+c, c, t+1))
        visited.add((m+c, c, t+1))
    # 3) ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ 1๊ฐœ ์‚ญ์ œ
    if m>0 and (m-1, c, t+1) not in visited:
        queue.append((m-1,c,t+1))
        visited.add((m-1,c,t+1))
  • BFS๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ์˜€๋‹ค!
  • ์ฒ˜์Œ์— ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜ 1๊ฐœ, ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋œ ์ด๋ชจํ‹ฐ์ฝ˜ 0๊ฐœ, ์‹œ๊ฐ„์€ 0์ดˆ๋กœ ์ €์žฅํ•ด์„œ ํ์— ๋„ฃ์–ด์คฌ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ ๊ฒ€์‚ฌํ•œ ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜, ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋œ ์ด๋ชจํ‹ฐ์ฝ˜, ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ๋‹ค์‹œ ๊ฒ€์‚ฌํ•ด์ฃผ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ visited set์— ๋„ฃ์–ด์ค€๋‹ค.
  • ์ด์ œ ๊ฐ ์ƒํƒœ์— ๋Œ€ํ•ด์„œ 1๋ฒˆ ์—ฐ์‚ฐ, 2๋ฒˆ ์—ฐ์‚ฐ, 3๋ฒˆ ์—ฐ์‚ฐ์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๋ฉด์„œ BFS ํƒ์ƒ‰์„ ๊ฑฐ์น˜๊ณ , ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜ m์ด s์™€ ๋™์ผํ•ด์ง€๋ฉด ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๊ณ  while๋ฌธ ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
    • 1๋ฒˆ ์—ฐ์‚ฐ์€ ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ชจ๋‘ ๋ณต์‚ฌํ•ด์„œ ํด๋ฆฝ๋ณด๋“œ์— ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ, ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜๊ฐ€ ๊ณง ํด๋ฆฝ๋ณด๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋œ๋‹ค. ๋˜, ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ 0๊ฐœ๋ผ๋ฉด ์ด ์—ฐ์‚ฐ์€ ํด๋ฆฝ๋ณด๋“œ๋ฅผ ๋น„์›Œ์ฃผ๋Š” ์—ฐ์‚ฐ์ด ๋˜๋ฏ€๋กœ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ๊ทธ๋ž˜์„œ m์ด 0๊ฐœ ์ด์ƒ์ธ์ง€ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ์—ฐ์‚ฐ์ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ด์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํ์— ๋„ฃ์–ด์ฃผ๊ณ , ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
    • 2๋ฒˆ ์—ฐ์‚ฐ์€ ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ™”๋ฉด์— ๋ถ™์—ฌ๋„ฃ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ, ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ํด๋ฆฝ๋ณด๋“œ์— ์ด๋ชจํ‹ฐ์ฝ˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋ถ™์—ฌ๋„ฃ๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ c>0์ธ์ง€ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ์—ฐ์‚ฐ์ด ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ธ์ง€ ํ™•์ธํ•ด์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํ์— ๋„ฃ์–ด์ฃผ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.
    • 3๋ฒˆ ์—ฐ์‚ฐ์€ ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜์„ 1๊ฐœ ์‚ญ์ œํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ, ํ™”๋ฉด์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜๋ฅผ -1ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ํ™”๋ฉด์— ์ด๋ชจํ‹ฐ์ฝ˜์ด ์กด์žฌํ•˜์ง€ ์•Š๋‹ค๋ฉด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ m>0์ธ์ง€ ํ™•์ธํ•˜๊ณ , ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ ํ›„์— ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํ์— ๋„ฃ์–ด์ฃผ๊ณ  ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค€๋‹ค.