๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

[Python - ๋ฐฑ์ค€ 14226] ์ด๋ชจํ‹ฐ์ฝ˜

yunakim2 2021. 4. 15. 23:02
๋ฐ˜์‘ํ˜•
 

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

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

www.acmicpc.net

๋ฌธ์ œ ์„ค๋ช…

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

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

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

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

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

์ž…๋ ฅํ˜•์‹

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

์ถœ๋ ฅํ˜•์‹

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

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

ํ’€์ด ๊ณผ์ •

BFS ๋ฌธ์ œ์ธ๊ฑด ์•Œ์•˜์œผ๋‚˜ ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ๋  ์ง€ ์ „ํ˜€ ๊ฐ์ด ์žกํžˆ์ง€ ์•Š์•„ ํ•ด๋‹ต์„ ๋ณด๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

์ด ๋ฌธ์ œ์— ์•„์ด๋””์–ด๋Š” ํด๋ฆฝ๋ณด๋“œ์˜ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜์™€ ํ™”๋ฉด์˜ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

๊ทธ๋ž˜์„œ s - ํ™”๋ฉด์— ์ถœ๋ ฅ๋œ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐฏ์ˆ˜, c - ํด๋ฆฝ๋ณด๋“œ์— ์žˆ๋Š” ์ด๋ชจํ‹ฐ์ฝ˜ ๊ฐœ์ˆ˜ ๋กœ ์„ค์ •ํ•˜๊ณ ,

BFS queue๋ฅผ ๊ณ„์† ๋Œ๋ฉด์„œ 

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

์„ธ๊ฐ€์ง€์˜ ํ–‰์œ„๋ฅผ ํ•ด์ฃผ๋ฉด ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

1๋ฒˆ์€ ๋ชจ๋‘ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ (S,C) -> (S,S) ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋˜์—ˆ๊ณ ,

2๋ฒˆ์€ ํด๋ฆฝ๋ณด๋“œ ์ด๋ชจํ‹ฐ์ฝ˜์„ ํ™”๋ฉด์— ๋ถ™์ด๋Š” ๊ฒƒ์œผ๋ฏ€๋กœ, (S,C) -> (S+C, C)๋กœ 

3๋ฒˆ์€ ํ™”๋ฉด ์ด๋ชจํ‹ฐ์ฝ˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ (S,C) -> (S-1,C)๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋ฉด ๋˜์—ˆ๋‹ค. 

 

 


from collections import deque

def bfs(n):
    queue = deque()
    queue.append((1,0))
    emoji[1][0] = 0
    while queue:
        s,c = queue.popleft()
        if emoji[s][s] == -1:
            emoji[s][s] = emoji[s][c] +1
            queue.append((s,s))
        if s+c <= n and emoji[s+c][c] == -1:
            queue.append((s+c,c))
            emoji[s+c][c] = emoji[s][c] +1
        if s-1 >= 0 and emoji[s-1][c] == -1:
            queue.append((s-1,c))
            emoji[s-1][c] = emoji[s][c] +1


if __name__ == '__main__':
    n = int(input())
    emoji = [[-1 for _ in range(n+1)] for _ in range(n+1)]
    bfs(n)
    ans = -1
    for i in range(n+1):
        if emoji[n][i] != -1:
            if ans == -1 or ans > emoji[n][i]:
                ans = emoji[n][i]


    print(ans)

 

 

 

๋ฐ˜์‘ํ˜•