백준 1759번: 암호 만들기 :: 매운코딩
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

+ Recent posts