• 문제 링크
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
• 풀이 과정
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int l, c;
static char[] code;
static boolean[] visit;
static StringBuilder result = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
l = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
code = new char[c];
visit = new boolean[c];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < c; i++)
code[i] = st.nextToken().charAt(0);
Arrays.sort(code);
recur(0, 0);
bw.write(result.toString());
bw.flush();
}
private static void recur(int idx, int depth) {
if (depth == l)
generate();
for (int i = idx; i < c; i++) {
visit[i] = true;
recur(i + 1, depth + 1);
visit[i] = false;
}
}
private static void generate() {
int vow = 0;
int cons = 0;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < c; i++) {
if (visit[i]) {
sb.append(code[i]);
if (isVowel(code[i]))
vow++;
else
cons++;
}
}
if (vow >= 1 && cons >= 2)
result.append(sb + "\n");
}
private static boolean isVowel(char ch) {
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
return true;
else
return false;
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 15684 사다리 조작 - Backtracking / Java (0) | 2022.09.19 |
---|---|
[백준] 14889 스타트와 링크 - Backtracking / Java (0) | 2022.09.18 |
[백준] 16958 텔레포트 - Brute Force / Java (0) | 2022.09.16 |
[백준] 4902 삼각형의 값 - Brute Force / Java (0) | 2022.09.15 |
[백준] 17471 게리맨더링 - Brute Force / Java (0) | 2022.09.14 |
댓글