๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฐฑ์ค€ 9095 ํŒŒ์ด์ฌ - 1,2,3 ๋”ํ•˜๊ธฐ - ๋™์  ๊ณ„ํš๋ฒ•, DFS

by ๐ŸŒปโ™š 2021. 10. 7.

๋ฐฑ์ค€ 9095 ํŒŒ์ด์ฌ

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

 

9095๋ฒˆ: 1, 2, 3 ๋”ํ•˜๊ธฐ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค, n์„ 1, 2, 3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

์ •์ˆ˜ n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n์„ 1,2,3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‹จ, ์œ„์น˜์˜ ์ค‘๋ณต๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 4๋ผ๋Š” ์ •์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ

  • 1+1+1+1
  • 1+1+2
  • 1+2+1
  • 2+1+1
  • 2+2
  • 1+3
  • 3+1

์ด๋ ‡๊ฒŒ ์œ„์น˜์˜ ์ค‘๋ณต๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด ์ž…๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ๋™์  ๊ณ„ํš๋ฒ•์„ ๊ณต๋ถ€ํ•˜๊ธฐ ์œ„ํ•ด ํ’€์€ ๋ฌธ์ œ์ธ๋ฐ์š”... ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ฏผํ•ด ๋ณด๋ฉด์„œ DFS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋งŽ์ด ๋“ค์—ˆ์–ด์š”. ์ˆœ์—ด์ด๋‚˜ ์กฐํ•ฉ์„ ๊ตฌํ•  ๋•Œ DFS๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ–ˆ๋˜ ๊ธฐ์–ต์ด ์žˆ์–ด์„œ ๋จผ์ € ๋– ์˜ฌ๋ž๋Š”๋ฐ์š”... ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ์•„๋ž˜์˜ ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ •์ˆ˜ n์ด ๋˜๊ธฐ ์œ„ํ•ด (1,2,3)์„ ๋”ํ•œ ํ•ฉ์˜ ๋ฐฉ๋ฒ•์€... (1,2,3)์„ ๊ฐ๊ฐ ๋บ€ n-(1,2,3)์„ ๋”ํ•ฉ ํ•ฉ์˜ ๋ฐฉ๋ฒ•์„ ์ „๋ถ€ ํ•ฉ์‚ฐํ•œ ๊ฐ’์ด๋‹ค

๊ธ€๋กœ ์„ค๋ช…ํ•˜๊ธฐ์—๋Š” ํž˜๋“œ๋‹ˆ ์•„๋ž˜ ํ‘œ๋ฅผ ๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋ ๊ฒƒ์ด๋‹ค.

1 2 3 4
1 (1) + 1

2
(1) + 2

(1 + 1) + 1
(2) + 1

3
-3 ์œ„์น˜์—์„œ ํ•ฉ
(1) + 3

-2 ์œ„์น˜์—์„œ ํ•ฉ
(1 + 1) + 2
(2) + 2

-1 ์œ„์น˜์—์„œ ํ•ฉ
(1 + 2) + 1
(1 + 1 + 1) + 1
(2 + 1) + 1
(3) + 1

ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ธ๋ฐ 3๊ฐœ์”ฉ ๋”ํ•˜๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.

 

 

Python ํ’€์ด 1

๋จผ์ € ๋™์  ๊ณ„ํš๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ํ’€์ด ์ž…๋‹ˆ๋‹ค.

import sys
read = sys.stdin.readline

cache = [0] * 11
cache[1] = 1
cache[2] = 2
cache[3] = 4

for i in range(4, 11):
    cache[i] = sum(cache[i-3:i])

T = int(read())
for _ in range(T):
    print(cache[int(read())])
  • ์ดˆ๊ธฐ๊ฐ’์„ 1,2,3์˜ ๊ฒฝ์šฐ๊นŒ์ง€ ๋จผ์ € ์บ์‹œ๊ฐ’์— ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.
  • ๋ฒ”์œ„๊ฐ€ 10๊นŒ์ง€ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ๊ตฌํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • i ๋ถ€ํ„ฐ ์ด์ „ 3๊ฐœ๊นŒ์ง€ ํ•ฉ์‚ฐ์„ ๊ตฌํ•œ๋‹ค.

 

Python ํ’€์ด 2

์ด๋ฒˆ ํ’€์ด๋Š” DFS๋ฅผ ์ด์šฉํ•œ ํ’€์ด์ž…๋‹ˆ๋‹ค.

import sys
read = sys.stdin.readline

def dfs(num):
    if arr[num] > 0:
        return arr[num]
    if num == 1:
        return 1
    elif num == 2:
        return 2
    elif num == 3:
        return 4
    else:
        arr[num] = dfs(num-1) + dfs(num-2) + dfs(num-3)
        return arr[num]
     
T = int(sys.stdin.readline())
for _ in range(T):
    l = int(read())
    arr = [0] * (l+1)
    print(dfs(l))
  • ๋™์  ๊ณ„ํš๋ฒ•์ด๋ž‘ ์›๋ฆฌ๋Š” ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹จ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ•˜๋Š” ์ฐจ์ด๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๊ฐ’๋“ค์ด ๋“ค์–ด ์žˆ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ํ•ด๋„๋˜๋Š”๋ฐ... ๊ทธ๋Ÿด๋ ค๋ฉด 1,2,3์— ๋Œ€ํ•œ ์ดˆ๊ธฐ๊ฐ’์„ ๋ฐฐ์—ด์— ์ง์ ‘ ๋„ฃ์–ด ๋™์  ๊ณ„ํš๋ฒ•์ด๋ž‘ ๋„ˆ๋ฌด ๊ฐ™์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋งค๋ฒˆ ๋‹ค์‹œ ์ˆœํšŒํ•˜๋Š” ํ˜•์‹์œผ๋กœ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€