[알고리즘] Swift -백준 #9095(1, 2, 3 더하기)

2023. 3. 22. 23:48ALGORITHM/Swift

728x90
반응형

문제링크

 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

 

문제

정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.

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

정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.

출력

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

예제 입력 1 

3
4
7
10

예제 출력 1 

7
44
274

 

 

 

 

분석

1,2,3을 이용하여 n을 만드는 방법이 몇 개인지 구하는 문제

 

풀이 과정

t = 테스트 케이스

n = 정수 (1~10)

 

n = 0 n = 1
1
n = 2
1+1

2
n = 3
1+1+1
1+2

2+1

3
n = 4
1+1+1+1
1+1+2
1+2+1
1+3

2+1+1
2+2

3+1
n = 5
1+1+1+1+1
1+1+1+2
1+1+2+1
1+1+3
1+2+1+1
1+2+2
1+3+1

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

3+1+1
3+2

n = 6
1+1+1+1+1+1
1+1+1+1+2
1+1+1+2+1
1+1+1+3
1+1+2+1+1
1+1+2+2
1+1+3+1
1+2+1+1+1
1+2+1+2
1+2+2+1
1+2+3
1+3+1+1
1+3+2

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

3+1+1+1
3+1+2
3+2+1
3+3
1 =1 =2 =4 =7 =13 =24

dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

 

 

풀이

testimport Foundation

var map = Array(repeating: 0, count: 11)
map[0] = 1
map[1] = 1
map[2] = 2

for i in 3..<11 {
    map[i] = map[i-1] + map[i-2] + map[i-3]
}

let t = Int(readLine()!)!
for _ in 0..<t {
    let n = Int(readLine()!)!
    print(map[n])
}

 

결과

 

 

 


📂  정리

표정리하다가,... 빠진 거 있어서 규칙이 안나와서.. 오래걸렸다.. 

 

 

 

 

728x90
반응형