1, 2, 3 더하기 성공출처다국어
한국어
시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초 (추가 시간 없음) | 512 MB | 62608 | 40249 | 26693 | 62.272% |
문제
정수 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
출처
ICPC > Regionals > Asia Pacific > Korea > Asia Regional - Taejon 2001 PC번
- 문제를 번역한 사람: baekjoon
- 문제의 오타를 찾은 사람: standardraccoon, wjrqur1200
알고리즘 분류
이 문제 같은 경우에는
이런식으로 1부터 6까지의 갯수를 다 세어봤습니다.
5까지 했는데 도대체 무슨 규칙이 있지 했는데
6까지 하니까, N = N-1 + N-2 + N-3 이라는 규칙을 알게 되었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import java.io.BufferedReader import java.io.BufferedWriter import java.io.InputStreamReader import java.io.OutputStreamWriter val br = BufferedReader(InputStreamReader(System.`in`)) fun main()=with(br){ val bw = BufferedWriter(OutputStreamWriter(System.out)) val N = readLine()!!.toInt() var DP = IntArray(11,{0}) DP[1]=1 DP[2]=2 DP[3]=4 for(i in 0 until N){ val num = readLine()!!.toInt() for(k in 4 .. num){ if(DP[k]!=0) continue else DP[k]=DP[k-1]+DP[k-2]+DP[k-3] } bw.write("${DP[num]}\n") } bw.flush() bw.close() } | cs |
'알고리즘 공부 > 미분류' 카테고리의 다른 글
백준 11723 집합 with Kotlin (0) | 2021.07.31 |
---|---|
백준 11399번 with 코틀린 (0) | 2021.07.23 |
백준 1463번 1로 만들기 with Kotlin # DP #IntArray 속도 (0) | 2021.07.23 |
백준 1003번 피보나치 수열 with Kotlin #DP (0) | 2021.07.23 |
백준 18111번 with Kotlin (0) | 2021.07.22 |