SWLUG/λ°±μ€€ BEAKJOON

[BAEKJOON/λ°±μ€€] 9095번: 1, 2, 3 λ”ν•˜κΈ°

waterproof 2024. 5. 1. 02:58

 


[1] 풀이

 

 

μ–΄λ–€ 숫자λ₯Ό μž…λ ₯해도 μ›ν•˜λŠ” λŒ€λ‘œμ˜ 결괏값이 λ‚˜μ˜€κ²Œ ν•˜λŠ” μ–΄λ– ν•œ λ‹¨μΌν•œ(?) 곡식이 ν•„μš”ν•œκ°€...에 λŒ€ν•œ 고민을 ν–ˆμ—ˆλŠ”λ°,

κ·œμΉ™μ— λŒ€ν•΄ κ³ λ―Όν•΄λ³Έ κ²°κ³Ό 이 λ¬Έμ œλŠ” "DP"λ₯Ό μ΄μš©ν•΄μ„œ ν‘ΈλŠ” λ¬Έμ œλ‹€!

 

κ·ΈλŸ¬λ‹ˆκΉŒ, ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ²˜λŸΌ 큰 문제λ₯Ό 이미 닡을 κ΅¬ν•œ μž‘μ€ 문제둜 λ‚˜λˆ„μ–΄μ„œ ν’€μ΄ν•˜λŠ” 방식을 μ‚¬μš©ν•œλ‹€λŠ” 것이닀.

 

ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ€ f(n) = f(n-1) + f(n-2)κ³Ό 같이 n번째 항이 n-1번째 ν•­κ³Ό n-2번째 항을 λ”ν•œ 값인 κ²½μš°μ˜€λŠ”λ°,

이 λ¬Έμ œμ—μ„œλŠ” λΉ„μŠ·ν•˜κ²Œ f(n) = f(n-3) + f(n-2) + f(n-1)와 같은 κ·œμΉ™μ΄ 적용이 λœλ‹€. (단, N>3)

 

 

확인을 해보겠닀.

 

 

1. n=4일 λ•Œ,

4λ₯Ό 1, 2, 3으둜 λ”ν•˜κΈ° λ•Œλ¬Έμ—, 1+3, 2+2, 3+1둜 λ‚˜λˆŒ 수 μžˆλ‹€.

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

 

 

1+3은 3을 λ‚˜νƒ€λ‚Ό 수 μžˆλŠ” 경우의 μˆ˜μ™€ κ°™μœΌλ―€λ‘œ f(3)
2+2λŠ” 2을 λ‚˜νƒ€λ‚Ό μˆ˜ μžˆλŠ” κ²½μš°μ˜ μˆ˜μ™€ κ°™μœΌλ―€λ‘œ f(2)
3+1은 1을 λ‚˜νƒ€λ‚Ό μˆ˜ μžˆλŠ” κ²½μš°μ˜ μˆ˜μ™€ κ°™μœΌλ―€λ‘œ f(1)

 

f(4)=f(1)+f(2)+f(3)으둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

 

 

2. n이 5일 λ•Œ,

5λ₯Ό 1, 2, 3으둜 λ”ν•˜κΈ° λ•Œλ¬Έμ—, 1+4, 2+3, 3+2둜 λ‚˜λˆŒ 수 μžˆλ‹€.

1+4 2+3 3+2
1+1+3
1+1+1+2
1+1+2+1
1+1+1+1+1
1+2+2
1+2+1+1
1+3+1
2+3
2+1+2
2+2+1
2+1+1+1
3+2
3+1+1

 

1+4은 4을 λ‚˜νƒ€λ‚Ό μˆ˜ μžˆλŠ” κ²½μš°μ˜ μˆ˜μ™€ κ°™μœΌλ―€λ‘œ f(4)
2+3λŠ” 3을 λ‚˜νƒ€λ‚Ό μˆ˜ μžˆλŠ” κ²½μš°μ˜ μˆ˜μ™€ κ°™μœΌλ―€λ‘œ f(3)
3+2은 2을 λ‚˜νƒ€λ‚Ό μˆ˜ μžˆλŠ” κ²½μš°μ˜ μˆ˜μ™€ κ°™μœΌλ―€λ‘œ f(2)

 

f(5)=f(1)+f(2)+f(3)으둜 λ‚˜νƒ€λ‚Ό 수 μžˆλ‹€.

 

λ”°λΌμ„œ n을 λ‚˜νƒ€λ‚΄λŠ” 경우의 μˆ˜λŠ”,

f(n) = f(n-3) + f(n-2) + f(n-1) (n>3) 와 κ°™λ‹€.

 

 


[2] μ½”λ“œ

 

import sys
input = sys.stdin.readline

def func(x):
  if x==1:
    return 1
  elif x==2:
    return 2
  elif x==3:
    return 4
  else:
    return func(x-1)+func(x-2)+func(x-3)

t = int(input())
for _ in range(t):
  n = int(input())
  print(func(n))

 

 


[3] λŠλ‚€ 점

 

자료ꡬ쑰 μ‹œκ°„μ— λ°°μ› λ˜ μž¬κ·€ν•¨μˆ˜ κ°œλ…μ„ μ‹€μ œλ‘œ μ½”λ“œλ‘œ κ΅¬ν˜„ν•΄ λ³Ό 수 μžˆμ—ˆλ˜ μ‹œκ°„μ΄μ—ˆλ‹€.

μ„Έ 단계 μ΄μ „μ˜ ν•¨μˆ˜κΉŒμ§€ ν˜ΈμΆœν•˜λŠ” κ²½μš°λ„ μžˆλŠ” 경우λ₯Ό λ³΄λ‹ˆ, DPκ°€ 더 효율적이기만 ν•˜λ‹€λ©΄ λ„€ 단계 μ΄μ „μ˜ ν•¨μˆ˜κΉŒμ§€λ„ ν˜ΈμΆœκ°€λŠ₯ν•˜μ§€ μ•Šμ„κΉŒ..? ν•˜λŠ” 생각도 λ“€μ—ˆλ‹€.

Cμ™€λŠ” λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ μž…λ ₯을 λ°˜λ³΅ν•΄μ„œ 받아쀄 수 μžˆλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€.

 


[4] 참고 자료

 

https://ggasoon2.tistory.com/39

https://velog.io/@greene/%EB%B0%B1%EC%A4%80-9095%EB%B2%88-1-2-3-%EB%8D%94%ED%95%98%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

[λ°±μ€€] 9095번 1, 2, 3 λ”ν•˜κΈ° 파이썬

[λ°±μ€€] 9095번 1, 2, 3 λ”ν•˜κΈ°

velog.io