백준 1759: 암호 만들기 (파이썬 / 자바)
정렬한 후 조합을 만들어 조합 안의 자음과 모음 개수를 센다
자바는 문자열 정렬을 할 줄 몰라서 아스키코드로 바꾼 후 정렬했음
파이썬
def combination(l, start):
if l == L:
v, c = 0, 0
for s in selected:
if s in vowels:
v += 1
else:
c += 1
if v >= 1 and c >= 2:
print(''.join(selected))
return
for i in range(start, C):
if visited[i] == True:
continue
selected[l] = lst[i]
visited[i] = True
combination(l + 1, i + 1)
visited[i] = False
L, C = map(int, input().split())
lst = sorted(list(map(str, input().split())))
selected = [0] * L
visited = [0] * C
vowels = ['a', 'e', 'i', 'o', 'u']
combination(0, 0)
자바
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class B1759 {
static int L;
static int C;
static int[] arr;
static int[] selected;
static boolean[] visited;
static void combination(int l, int start) {
if (l == L) {
int v = 0;
int c = 0;
for (int n : selected) {
// 자모음 개수 확인
if (n == 97 || n == 101 || n == 105 || n == 111 || n == 117) {
v++;
} else c++;
}
if (v >= 1 && c >= 2) {
for (int n : selected) System.out.print((char)n + "");
System.out.println();
}
return;
}
for (int i = start; i < arr.length; i++) {
if (visited[i]) continue;
selected[l] = arr[i];
visited[i] = true;
combination(l + 1, i + 1);
visited[i] = false;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// C개 중 N개 선택하는 조합
L = Integer.parseInt(st.nextToken()); // 암호 길이
C = Integer.parseInt(st.nextToken()); // 사용된 알파벳의 수
arr = new int[C];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < C; i++) {
arr[i] = ((int)st.nextToken().charAt(0));
}
selected = new int[L];
visited = new boolean[C];
Arrays.sort(arr);
combination(0, 0);
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 11478. 서로 다른 부분 문자열의 개수 (python) (0) | 2023.03.20 |
---|---|
[BOJ] 9742. 순열 (python / java) (0) | 2023.03.19 |
[BOJ] 17608. 막대기 (python / Java) (0) | 2023.03.14 |
[BOJ] 10986. 나머지 합 (Java / Python) (0) | 2023.03.12 |
[BOJ] 12933. 오리 (python) (0) | 2023.03.10 |