알고리즘/백준

[BaekJoon] 백준 2775번_부녀회장이 될테야 for Java

정석이 2021. 9. 13. 17:35

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

백준 2775번 -부녀회장이 될테야

 

 

 

 

0층은 i호만큼 사람이 있고

 

1층

 1호 : 0층 1호

 2호 : 0층 1호 + 2호

 3호 : 0층 1호 + 2호 + 3호

 

2층

 1호 : 1층 1호

 2호 : 1층 1호 + 2호

 3호 : 1층 1호 + 2호 + 3호

 

 

 

 

이런식이므로... 찾으려는 층 호의 인원수를 구하려면 그 전층과 그 전전층,.... 이렇게 내려와서 0층까지 내려와야한다.

 

 

이럴 때 쓰는 재귀함수!!!!!! 알아서 돌라는 뜻이다.....!

 

 

 

 

 

 

 

 

 

package Baek;

import java.util.Scanner;

public class Baek2775 {  // I want to be an apt president	
	public static void main(String[] args) {
		
		
		
		Scanner scan = new Scanner(System.in);
		int T = scan.nextInt();
		
		for(int i = 0; i < T; i++) {
			
			int k = scan.nextInt();
			int n = scan.nextInt();
		
			System.out.println(House(k, n));
		}
		
		scan.close();
		
	}
	
	public static int House(int k, int n) {
		if(k==0)
			return n;
		else if(n==0)
			return 0;
		else 
			return House(k-1, n) + House(k, n-1);
	}

}

 

 

 

 

 

 

 

원래 인원수 + House재귀 이런식으로 하려고 했는데 그러면 인원수가 계속 더해져서....암튼 틀린다. 허허

 

 

그래서 예를 들어 House(1,1)일 때 = 1층 1호의 인원수를 구할 때

 

 

House(k-1, n) + House(k, n-1)을 사용하여

 

 

 

0층 1호 + 1층 0호

=> 0층 1호는 호수를 리턴

=> 1층 0호는 존재하지 않으므로 0을 리턴

 

 

 

하는 방식으로 넣어주어야 했다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

사실 이거 고민하는데에 시간이 너무 많이들어서 인터넷 참고했다... 기억하고 써먹도록 하자!