ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

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

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

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์ด๋ชจํ‹ฐ์ฝ˜์„ ์ถœ๋ ฅํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์€ ์ด์ „์— ๋‹ค๋ฃฌ 1697 ์ˆจ๋ฐ”๊ผญ์งˆ ๋ฌธ์ œ์™€ ๊ฐ™์ด ํŠธ๋ฆฌ์˜ ๊ฐ€์ง€๋ฅผ ๋ปฃ์–ด๋‚˜๊ฐ€๋ฉฐ ์ •๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฌธ์ œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณต์‚ฌ, ๋ถ™์—ฌ๋„ฃ๊ธฐ, ์‚ญ์ œ์™€ ๊ฐ™์ด 3๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋กœ ๊ฐ€์ง€๋ฅผ ๋ปฃ์–ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค. ๊ฐ€์ง€๋ฅผ ๋ปฃ์–ด๋‚˜๊ฐˆ ๋•Œ ํ˜„์žฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

  • ํ˜„์žฌ ๋ชจ๋‹ˆํ„ฐ์— ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜์ด S๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ ํ์— ์‚ฝ์ž…ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ๋ชจ๋‹ˆํ„ฐ์— ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜์ด 0๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.
  • ๊ฐ€์ง€๋ฅผ ๋ปฃ์–ด๋‚˜๊ฐ€๋ฉฐ ํ˜„์žฌ ํ‘œ์‹œ๋œ ์ด๋ชจํ‹ฐ์ฝ˜์„ ๋ˆ„์ ํ•œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin
from collections import deque


def bfs(start):
    q = deque([start])

    while q:
        m, c = q.popleft()

        if m == s:
            return check[m][c]

        for n_m, n_c in \
                (m, m), (m + c, c), (m - 1, c):
            if 0 <= n_m <= s and not check[n_m][n_c]:
                q.append([n_m, n_c])
                check[n_m][n_c] = check[m][c] + 1


if __name__ == '__main__':
    MAX = 1001
    s = int(stdin.readline())
    check = [[0] * MAX for _ in range(MAX)]
    print(bfs([1, 0]))
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€