양의 정수 n을 입력받아서 n쌍의 괄호로 만들 수 있는 올바른 괄호 배열의 개수를 구하는 프로그램을 작성하시오.
[입력 형식]
양의 정수 n을 입력한다(1<=n<=10)
[출력 형식]
n쌍으로 가능한 올바른 괄호 배열의 개수를 출력한다.
예1 | 예2 | 예3 | |
입력 | 1 | 2 | 3 |
출력 | 1 | 2 | 5 |
[풀이 방법]
재귀 호출을 이용하여 푸는 문제이다(카탈란 수를 이용해서도 풀 수 있다). 괄호 배열의 형식을 생각했을 때 올바른 괄호 배열의 경우 남아 있는 왼쪽 괄호의 개수가 남아 있는 오른쪽 괄호의 개수보다 항상 같거나 적어야 한다. 이 점을 생각해서 재귀호출을 이용한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(solution(n,n));
}
public static int solution(int left, int right) {
if(left==0&&right==0) return 1; //왼쪽, 오른쪽 모두 사용
else {
//항상 left<=right여야 함
if(left==0) {
return 1; //왼쪽 괄호를 다 썼으므로 만들 수 있는 괄호 배열은 한종류(앞으로 다 오른쪽)
}
else if(right>left) return solution(left-1, right)+solution(left, right-1);
else return solution(left-1, right);
}
}
}
'알고리즘연습' 카테고리의 다른 글
[백준] 1747번 소수&팰린드롬 자바 java (0) | 2021.04.29 |
---|---|
[백준] 2664 촌수 계산 JAVA (0) | 2021.04.03 |
[EPPER] 거스름돈 화폐 계산 알고리즘 자바 (0) | 2021.03.23 |
중위표기법 후위표기법 변환 및 계산 (0) | 2021.03.22 |
단순연결리스트 삽입, 삭제 구현 (0) | 2021.03.22 |