728x90
300x250
https://www.acmicpc.net/problem/1759
조건
1. 모음이 최소 1개, 자음이 최소 2개여야 함
2. 오름차순으로 암호 생성해야 함
순서
1. 오름 차순 해주기
2. 순서대로 하나씩 돌기
3. 암호갯수만큼 생성되면 자음/모음 갯수 확인 후 출력
import java.util.*;
public class Main {
public static int wordCnt, N;
public static ArrayList<Character> arr = new ArrayList<>();
public static boolean visit[];
public static String moeum = "aeiou";
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
wordCnt = sc.nextInt();
N = sc.nextInt();
visit = new boolean[N];
for (int i = 0; i < N; i++) {
arr.add(sc.next().charAt(0));
}
//오름차순 정렬
Collections.sort(arr);
dfs(0,0,"",0,0);
}
public static void dfs(int idx, int cnt, String pw,int m, int j) { //idx, 총 갯수, 만들어지는 pw내용, 모음, 자음
//종료조건
//wordCnt와 동일한 갯수인가?
//모음이 최소 1개 , 자음이 최소 2개가 있는가?
if(cnt==wordCnt && m >=1 && j >=2 ) {
System.out.println(pw);
return;
}
for (int i = idx; i < N; i++) {
char ch = arr.get(i); //idx문자
//이미 방문했던 곳인가?
if(visit[i])
continue;
//방문처리
visit[i] = true;
//모음인가? 자음인가?
if(moeum.contains(String.valueOf(ch)))
dfs(i,cnt+1,pw+ch,m+1,j);
else
dfs(i,cnt+1,pw+ch,m,j+1);
//방문false처리
visit[i] = false;
}
}
}
728x90