[프로그래머스 코딩테스트] 숫자 짝꿍

gyeol·2024년 2월 8일

코딩테스트 공부

목록 보기
18/53
post-thumbnail

두 정수 X, Y의 임의의 자리에서 공통으로 나타나는 정수 k(0 ≤ k ≤ 9)들을 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라 합니다(단, 공통으로 나타나는 정수 중 서로 짝지을 수 있는 숫자만 사용합니다). X, Y의 짝꿍이 존재하지 않으면, 짝꿍은 -1입니다. X, Y의 짝꿍이 0으로만 구성되어 있다면, 짝꿍은 0입니다.

예시

X = 3403이고 Y = 13203이라면, XY의 짝꿍은 XY에서 공통으로 나타나는 3, 0, 3으로 만들 수 있는 가장 큰 정수인 330입니다.

다른 예시로 X = 5525이고 Y = 1255이면 XY의 짝꿍은 XY에서 공통으로 나타나는 2, 5, 5로 만들 수 있는 가장 큰 정수인 552입니다(X에는 5가 3개, Y에는 5가 2개 나타나므로 남는 5 한 개는 짝 지을 수 없습니다.)

풀이

짝꿍을 이용해 가장 큰 정수를 만들어야 하기에 먼저 주어진 XY를 내림차순으로 정렬해줍니다.
String 타입은 값을 변경시킬 수 없기에 우리는 StringBuilder를 사용해 내림차순 정렬을 해줘야 합니다.

먼저 주어진 XYchar타입의 배열로 바꿔서 오름차순 정렬을 해준 뒤 StringBuilderreverse() 메서드를 사용해 내림차순으로 바꾸어줍니다.

StringBuilder로 바꾸어주지 않으면 런타임에러가 발생하기 때문에 꼭 바꿔줘야 합니다..!

그리고 반복문을 통해 짝꿍을 찾아줍니다.
이때 짝꿍이 없으면 -1을 리턴해야하고, answer이 0으로 시작한다면 그냥 0으로 취급해줘야합니다.

내 코드

import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        
        char[] tmp1 = X.toCharArray();
        Arrays.sort(tmp1);
        StringBuilder x = new StringBuilder(new String(tmp1)).reverse();
        
        char[] tmp2 = Y.toCharArray();
        Arrays.sort(tmp2);
        StringBuilder y = new StringBuilder(new String(tmp2)).reverse();
        
        int i = 0, j = 0;
        while (i < x.length() && j < y.length()) {
            if (x.charAt(i) == y.charAt(j)) {
                answer.append(x.charAt(i));
                i++;
                j++;
            } else if (x.charAt(i) < y.charAt(j)) j++;
            else i++;
            
        }
        
        if (answer.toString().equals("")) return "-1";
        else if (answer.toString().startsWith("0")) return "0";
        else return answer.toString();
    }
}
profile
공부 기록 공간 '◡'

0개의 댓글