알고리즘/백준

백준 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<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