[문제 해결]
- 문자열 X, Y, Z 에서 K개를 선택해 나온 조합에서 같은 문자열이 2개 이상 나온 문자열을 출력하는 문제
- X, Y, Z 조합을 구하면서 HashMap을 이용해 문자열이 나온 빈도수를 기록한다.
- 빈도수가 2 이상인 문자열들을 오름차순 출력
[Java]
import java.io.*;
import java.util.*;
public class Main {
static HashMap<String, Integer> map = new HashMap<>();
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String x = br.readLine();
String y = br.readLine();
String z = br.readLine();
char xArr[] = x.toCharArray();
char yArr[] = y.toCharArray();
char zArr[] = z.toCharArray();
int k = Integer.parseInt(br.readLine());
combination(xArr, new boolean[xArr.length], 0, k);
combination(yArr, new boolean[yArr.length], 0, k);
combination(zArr, new boolean[zArr.length], 0, k);
ArrayList<String> list = new ArrayList<>();
for(String key : map.keySet()){
if(map.get(key) >= 2){
list.add(key);
}
}
if(list.size() == 0){
System.out.println(-1);
return;
}
Collections.sort(list);
for(String ans : list) System.out.println(ans);
}
public static void combination(char arr[], boolean visited[], int start, int r){
if(r == 0){
StringBuilder sb = new StringBuilder("");
for(int i=0; i<arr.length; i++)
if(visited[i]) sb.append(arr[i]);
String key = sb.toString();
map.put(key, map.getOrDefault(key, 0) + 1);
return;
}
for(int i=start; i<arr.length; i++){
if(!visited[i]){
visited[i] = true;
combination(arr, visited, i + 1, r - 1);
visited[i] = false;
}
}
}
}
'PS > 백준' 카테고리의 다른 글
백준 - 친구비 16562 (1) | 2023.03.08 |
---|---|
백준 - 연속합 1912 java (0) | 2023.03.06 |
백준 - 캠프 준비 16938 (0) | 2023.03.01 |
[백준] - 도영이가 만든 맛있는 음식 2691 (0) | 2023.02.28 |
[백준] - Australian Voting (호주식 투표법) 4419 (0) | 2023.02.13 |