본문 바로가기

알고리즘/백준 문제풀이

백준 9095번 - 1, 2, 3 더하기

728x90

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

 

9095번: 1, 2, 3 더하기

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

www.acmicpc.net

문제 접근

주어진 정수를 1,2,3의 합으로 나타내는 경우의 수를 구하는 문제

주어진 정수를 1,2,3으로 쪼개는 경우의 수 :: 재귀를 통해 구현

 

 

재귀함수의 구성요소는 다음과 같다.

1. 다음 경우를 호출

2. 정답을 찾은 경우 return

3. 불가능한 경우 return(문제의 조건을 위배한 경우, 절대로 답을 구할 수 없는 경우)

 

정답 코드

    import java.util.Scanner


    fun main(args: Array<String>): Unit = with(Scanner(System.`in`)) {
        val m = nextInt()
        for (i in 0 until m){
            val n = nextInt()
            println(repeat(0, n))

        }
    }

    //입력값과 중간값을 받아 둘이 같으면 정답을 찾은걸로 간주
fun repeat(sum:Int, n:Int): Int{

        if (sum > n) return 0 //답을 더이상 못찾는 경우
        if (sum == n) return 1 //답을 찾은 경우

        var count = 0
    for (i in 1..3){
       count +=  repeat(sum+i, n)
    }
        return count
}