1759. 암호만들기
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
- 내 풀이
- 예시 테스트케이스를 조건으로 착각하지 않도록 주의할것!
- 4글자 중 모음 최소 1개, 자음 최소 2개이므로 0<모음<=2 -> 생각했다가 오류
- -> 테케가 4글자일 뿐 4글자 고정이 아니었다!!!
- 모음개수, 자음 개수따로 세어서 기준 만들어줘야함
package day15_dfs;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
public class JUN1759_ParkSomin {
static int N,C, moflag, zaflag;
static String[] str, result;
static ArrayList<String> mo=new ArrayList<>(Arrays.asList("a","e","i","o","u"));
public static void main(String[] args) throws IOException {
//최소 1개의모음 , 최소 2개의 자음
//알파벳 오름차순 정렬
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine());
//암호: 서로다른 C개의 문자 중 N개로 구성(조합)
N=Integer.parseInt(st.nextToken());
C=Integer.parseInt(st.nextToken());
str=new String[C];
result=new String[N];
st=new StringTokenizer(br.readLine());
for (int i = 0; i < C; i++) {
str[i]=st.nextToken();
}
//오름차순 정렬
Arrays.sort(str);
combi(0,0);
}
private static void combi(int cnt, int start){
if(cnt==N){
moflag=0;
zaflag=0;
String answer="";
for (String a: result) {
answer+=a;
if(mo.contains(a)) moflag++;
else zaflag++;
}
//4글자 중 모음 최소 1개, 자음 최소 2개이므로 0<모음<=2 -> 생각했다가 오류
//말그대로 모음, 자음 따로 개수 세줘야함
//if (moflag>=1 && zaflag>=2){
if(moflag>0 && moflag<=2){
System.out.print(answer);
System.out.println();
}
return;
}
for (int i = start; i < C; i++) {
result[cnt]=str[i];
combi(cnt+1,i+1);
}
}
}
'코딩테스트 > JAVA 코테' 카테고리의 다른 글
| [SW][union-find] 3289. 서로소 집합 (0) | 2023.02.28 |
|---|---|
| [SW][union-find] 7465. 창용 마을 무리의 개수 (0) | 2023.02.28 |
| [백준] [BFS] [Union-Find] 2606.바이러스 (0) | 2023.02.24 |
| [JAVA] [백준] [실버4] 1244.스위치 켜고 끄기 (0) | 2023.02.08 |
| 머쓱이보다 키큰 사람 (0) | 2023.02.07 |