메이쁘

(JAVA) 백준 1759번 : 암호 만들기 본문

Algorithm/Baekjoon

(JAVA) 백준 1759번 : 암호 만들기

메이쁘 2020. 3. 23. 22:05

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

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

 

 

 

 

부분 조합을 이용하는 문제이다.

 

 

여기서 중요한 것은 

 

 

 

1. 암호는 L 개의 알파벳으로 이루어져 있다.

 

2. 모음은 최소 1개, 자음은 최소 2개 가 암호에 포함되어 있어야 한다.

 

3. 암호 내 알파벳은 오름차순 정렬이 되어있다.

 

 

매커니즘


모음을 기준으로 만약 모음이 i개라면, 자음은 L - i 개가 되어야 한다.

 

예를 들어,

모음을 1개 뽑는 경우의 수 nC1 조합을 통해 원하는 모음 1개를 얻으면

자음은 자연스럽게 L - 1개를 뽑는 경우의 수 nC(L-1) 조합을 통해 원하는 자음을 L - 1개를 얻고

 

이 둘을 합친 문자열이 곧 암호이고 정답 중 하나가 된다.

 

** 알파벳이 오름차순 정렬이므로 String.toCharArray[] => Arrays.sort() => String.valueOf(CharArray) 를 통해 

알파벳 오름차순 된 암호를 얻을 수 있다.

 

 

그래서 for문을 통해

모음을 1개부터 L - 2 개 까지 뽑아가며 진행하면 된다.

*** L - 2개까지만 뽑는 이유는 자음이 최소 2개 는 들어가야 하는 조건이 있기 때문이다.

 

쉽쥬!?

 

감사합니다.

 

 

소스코드


 

 

 

전체 소스코드 깃으로 보기

 

 

 

 

Comments