알고리즘/백준
백준 1622 - 공통 순열
dev.moon
2021. 9. 21. 12:14
1. 유형
정렬
2. 문제 분석
문자열 최대 길이가 1000입니다. 따라서 딕셔너리를 만들어서 두 문자열을 비교해줬습니다.
Map {문자, 문자가 나온 횟수}
예를들어 "abccc"라는 문자가 있다면, {a=1,b=1, c=3} 형식으로 됩니다.
두 문자열을 딕셔너리로 만들고, 공통 요소가 있을 경우 더 더 낮은 횟수만큼 정답에 넣어주면 됩니다.
아마도 이 문제의 가장 어려운 점은 EOF입니다.
Scanner를 사용해서, 아래처럼 다음 문자열이 존재하는지를 판단했습니다.
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
//
}
BuffredReader를 이용해 보려고 했지만
계속 런탐에러가 나와서 포기...왜 안될까요...
3. 코드
import java.io.*;
import java.util.*;
public class Main {
static int N, M, W;
public static void main(String[] args) throws IOException {
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
char[] a=sc.nextLine().toCharArray();
char[] b=sc.nextLine().toCharArray();
Map<Character, Integer> L = new HashMap<>();
Map<Character, Integer> R = new HashMap<>();
for(char c: a)
L.put(c, L.getOrDefault(c, 0)+1);
for(char c: b)
R.put(c, R.getOrDefault(c, 0)+1);
List<Character> list=new ArrayList<>();
for(char k: L.keySet()) {
if(R.containsKey(k)) {
int m = Math.min(L.get(k), R.get(k));
while(m-->0)
list.add(k);
}
}
Collections.sort(list);
String s="";
for(char c: list) {
s+=c;
}
sb.append(s+"\n");
}
System.out.println(sb);
}
static int stoi(String s) {
return Integer.valueOf(s);
}
}