문제 풀이/백준

[백준] 1622번. 공통 순열(JAVA)

27200 2025. 6. 28. 11:59

문제

https://www.acmicpc.net/problem/1622


풀이(13분)

import java.io.*;
import java.util.*;

public class Main {

    private static final int ALPHABET_SIZE = 26;

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String lineA;

        while ((lineA = reader.readLine()) != null) {
            String lineB = reader.readLine();
            if (lineB == null) break;

            int[] freqA = getCharFrequency(lineA);
            int[] freqB = getCharFrequency(lineB);

            String common = getCommonCharacters(freqA, freqB);
            System.out.println(common);
        }
    }

    private static int[] getCharFrequency(String input) {
        int[] frequency = new int[ALPHABET_SIZE];
        for (char ch : input.toCharArray()) {
            frequency[ch - 'a']++;
        }
        return frequency;
    }

    private static String getCommonCharacters(int[] freqA, int[] freqB) {
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < ALPHABET_SIZE; i++) {
            int commonCount = Math.min(freqA[i], freqB[i]);
            for (int j = 0; j < commonCount; j++) {
                result.append((char) (i + 'a'));
            }
        }
        return result.toString();
    }
}

문제 풀이 전략

 

직접 알파벳의 개수를 카운트 한 뒤 직접 list에 추가해 주는 단순한 방법이다.

 

이 문제에서 조금 어려울 수 있는 부분은 EOF처리에 있다.

입력이 언제 끝나는지 모르는 상황에서 입력을 종료하고 정답을 출력해야 하기 때문이다.

https://to-travel-coding.tistory.com/408

 

[도구정리] 코딩테스트 EOF 입력 처리(JAVA)

🧪 자바에서 테스트 케이스가 여러 가지 방식으로 주어질 때 입력 처리 방법문제를 풀다 보면 테스트 케이스가 다양한 방식으로 주어질 수 있다. 그 방식에 따라 입력 처리 로직을 다르게 구성

to-travel-coding.tistory.com

EOF 처리를 모른다면 위의 내용을 참고하자.