백준 1622 - 공통 순열

백준 1622 - 공통 순열

[문제 바로가기]

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 L = new HashMap<>(); Map 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 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+"

"); } System.out.println(sb); } static int stoi(String s) { return Integer.valueOf(s); } }

from http://moons-memo.tistory.com/246 by ccl(A) rewrite - 2021-09-21 12:27:17