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);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 9548 - 무제 (0) | 2021.09.22 |
---|---|
백준 17141 - 연구소2 (0) | 2021.09.21 |
백준 1937 - 욕심쟁이 판다 (0) | 2021.09.18 |
백준 2146 - 다리 만들기 (0) | 2021.09.10 |
백준 19542 - 전단지 돌리기 (0) | 2021.09.09 |