https://www.acmicpc.net/problem/1759
코드설명
백트래킹 문제입니다.
문제에서 유의해야할점은, 암호들로 주어진 알파벳들을 중복해서 사용하는 순열을 사용하면 안되고
일반 순열을 구하여 진행합니다.
이 문제에서 JAVA의 Stream을 활용하여 문자열에서 문자의 개수를 구했습니다.
moeumCnt += str.chars().filter(c -> c == 'a').count();
혹은 replace를 사용하여 'a,e,i,o,u'를 공백으로 replace한뒤 기존 length - 바꾼 문자열로 하면 모음의 개수가 나옵니다.
아니면, 문자열을 사용하여 풀지않고
char[] answer = new char[L] 으로 선언하여 char을 단순히 순회해서 구해도 됩니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int L, C;
public static char[] arr;
public static int answer = 0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
L = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
arr = new char[C];
for(int i=0;i<C;i++) {
arr[i] = st.nextToken().charAt(0);
}
Arrays.sort(arr);
simulate(0, 0, "");
}
public static void simulate(int idx, int level, String s) {
if(level == L && check(s) == true) {
System.out.println(s);
return ;
}
if(level >= L) {
return ;
}
for(int i=idx; i<C;i++) {
simulate(i+1, level + 1, s + arr[i]);
}
}
public static boolean check(String str) {
long moeumCnt = str.chars().filter(c -> c == 'a').count();
moeumCnt += str.chars().filter(c -> c == 'e').count();
moeumCnt += str.chars().filter(c -> c == 'i').count();
moeumCnt += str.chars().filter(c -> c == 'o').count();
moeumCnt += str.chars().filter(c -> c == 'u').count();
long jaeumCnt = 0;
jaeumCnt = L - moeumCnt;
if(moeumCnt >= 1 && jaeumCnt >= 2) {
return true;
}
return false;
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2670 연속부분최대곱 - DP JAVA (0) | 2023.08.24 |
---|---|
[백준] 2669 직사각형 네개의 합집합의 면적 구하기 - 구현 JAVA (0) | 2023.08.24 |
[백준] 17136 색종이 붙이기 - 브루트포스(Brute-Force) + 백트래킹(BackTracking) JAVA (0) | 2023.08.23 |
[백준] 2661 좋은수열 - 백트래킹(Backtracking) + 문자열(String) + 아이디어(Idea) JAVA (0) | 2023.08.22 |
[백준] 1062 가르침 - 백트래킹(BackTracking) + 조합(Combination) JAVA (0) | 2023.08.22 |