본문 바로가기
PS/BOJ

백준 1622 자바 - 공통 순열 (BOJ 1622 JAVA)

by Nahwasa 2021. 11. 25.

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

 

 

  중요한건 2개의 문자열에서 각각의 문자열에 포함된 알파벳의 갯수이다. 예를들어 다음을 보자.

S1 : accaab

S2 : cccabbb

 

S1은 a:3, b:1, c:2

S2는 a:1, b:3, c:3

 

이다. 이렇게 카운팅만 할 수 있다면, 사전순으로 가장 빠르면서 문제에서 제시된 출력은 a,b,c,d,...,z 까지 세어둔 수를 확인하면서 둘 중 작은 개수만큼 출력하면 된다.

 

위를 예로들면 a : 3과 1중 작은거, b : 1과 3중 작은거, c : 2와 3중 작은거.

따라서 a를 1번, b를 1번, c를 2번 출력하면 되므로 답은

abcc가 된다.

 

 

 

코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/01600/BOJ_1622.java

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    private int[] getCntArr(String s) {
        int[] cnt = new int['z'-'a'+1];
        for (int i = 0; i < s.length(); i++) {
            cnt[s.charAt(i)-'a']++;
        }
        return cnt;
    }

    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder answer = new StringBuilder();
        while (true) {
            String a = br.readLine();
            if (a == null) break;
            String b = br.readLine();

            int[] cntA = getCntArr(a);
            int[] cntB = getCntArr(b);

            for (int i = 0; i < cntA.length; i++) {
                for (int j = 0; j < Math.min(cntA[i], cntB[i]); j++) {
                    answer.append((char)('a'+i));
                }
            }
            answer.append('\n');
        }
        System.out.print(answer);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

 

댓글