[백준] 9095번: 1, 2, 3 더하기 - Kotlin[코틀린]

2023. 9. 21. 02:18·알고리즘/Baekjoon

문제

 

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

 


풀이

 

 문제는 하나의 자연수를 1, 2, 3으로 조합하여 만드는 경우의 수를 구하는 것으로 우선 1, 2, 3을 만드는 경우의 수를 먼저 확인해보자.

 

 1을 만드는 경우의 수는 (1)으로 1개고, 

 2를 만드는 경우의 수는 (1 + 1), (2)로  2개, 

 3을 만드는 경우의 수는 (1 + 1 + 1), (1 + 2), (2 + 1), (3)으로 4개다.

 

 1, 2, 3을 조합하여 4를 만드는 방법은 (1 + 3), (2 + 2), (3 + 1)로 나타낼 수 있는데,

 

 (1 + 3)은 (1) + (1 + 1 + 1), (1) + (1 + 2), (1) + (2 + 1), (1) + (3)으로, 3을 만드는 경우의 수에서 1을 더한 것이다.

 (2 + 2)는 (2) + (1 + 1), (2) + (2)으로 2를 만드는 경우에서 2를 더한 것이다,

 (3 + 1)은 (3) + (1)으로 1을 만드는 경우의 수에서 3을 더한 것이다.

 모든 경우의 수를 모두 더하면 총 7개가 된다.

 

 5를 만드는 방법도 마찬가지로 (1 + 4), (2 + 3), (3 + 2) 3가지 경우로 나타낼수 있고, 4를 만드는 경우의 수 + 1, 3을 만드는 경우의 수 + 2, 2를 만드는 경우의 수 + 3이 되어 총 13개가 된다.

 

 위의 규칙을 점화식으로 만들면  dp[i] = dp[i - 3] + dp[i - 2] + dp[i - 1] 이 된다. 문제에서 주어진 범위인 10까지 구하고 입력받은 수의 경우의 수를 출력하면 된다.

 


코드

 

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()

    val dp = IntArray(11)
    dp[1] = 1
    dp[2] = 2
    dp[3] = 4
    for(i in 4..10) {
        dp[i] = dp[i-3] + dp[i-2] + dp[i-1]
    }

    val sb = StringBuilder()
    val testCase = br.readLine().toInt()

    repeat(testCase) {
        sb.append("${dp[br.readLine().toInt()]}\n")
    }
    
    bw.write("$sb")
    bw.flush()
    bw.close()
    br.close()
}

 

'알고리즘 > Baekjoon' 카테고리의 다른 글

[백준] 1931번: 회의실 배정 - Kotlin[코틀린]  (0) 2023.09.23
[백준] 2579번: 계단 오르기 - Kotlin[코틀린]  (0) 2023.09.21
[백준] 11050번: 이항 계수 1 - Kotlin[코틀린]  (0) 2023.09.20
[백준] 11401번: 이항 계수 3 - Kotlin[코틀린]  (0) 2023.09.18
[백준] 11051번: 이항 계수 2 - Kotlin[코틀린]  (0) 2023.09.17
'알고리즘/Baekjoon' 카테고리의 다른 글
  • [백준] 1931번: 회의실 배정 - Kotlin[코틀린]
  • [백준] 2579번: 계단 오르기 - Kotlin[코틀린]
  • [백준] 11050번: 이항 계수 1 - Kotlin[코틀린]
  • [백준] 11401번: 이항 계수 3 - Kotlin[코틀린]
junghoooooon
junghoooooon
  • junghoooooon
    코드팁스
    junghoooooon
  • 전체
    오늘
    어제
    • 전체 (120)
      • 안드로이드 (0)
        • 코드팁스 (0)
      • 유니티 (0)
        • 코드팁스 (0)
      • 알고리즘 (118)
        • 알고리즘 (0)
        • Baekjoon (118)
      • GitHub (0)
      • 티스토리 (2)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      그래프 탐색
      프림
      수학
      백트래킹
      피보나치
      소수 판정
      티스토리
      투 포인터
      BFS
      유니온파인드
      스택
      재귀
      우선순위 큐
      그리디
      dfs
      문자열
      이분 탐색
      큐
      에라토스테네스의 체
      MST
      정렬
      누적 합
      구현
      브루트포스
      분할 정복
      DP
      모듈러 곱셈 역원
      분리집합
      크루스칼
      그래프이론
    • hELLO· Designed By정상우.v4.10.2
    junghoooooon
    [백준] 9095번: 1, 2, 3 더하기 - Kotlin[코틀린]
    상단으로

    티스토리툴바