Dev/Algorithm

[프로그래머스] 숫자 짝꿍 - Java

VIPeveloper 2024. 5. 30. 14:46
728x90
반응형

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

생각

  • 생각을 하고, 구현하는 정도의 수준이 Lv1 이라면, 나는 그정도는 되는 것 같다는 생각이 들었다.

코드

  • 약간 괴랄하긴 한데,, 해시값에 넣어놓고 맞으면 우선순위 큐에 넣어놨다.
  • 다 배웠던 알고리즘이라 했는데 처음에는 실패했다.
  • StringBuilder 를 사용하여 통과했다.
import java.util.Collections;
import java.util.HashMap;
import java.util.PriorityQueue;

public class Main {
    public static void main(String[] args) {
        System.out.println(solution("1002", "30005"));  // 2
        System.out.println(solution("100"	,"2345"));  // 2
        System.out.println(solution(	"12321", "42531")); // 5
        System.out.println(solution("100",	"123450")); // 0
    }
    public static String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        HashMap<Character , Integer> hashMap = new HashMap<>();
        PriorityQueue<Character> queue = new PriorityQueue<>(Collections.reverseOrder());
        for (int i = 0; i < X.length(); i++) {
            hashMap.put(X.charAt(i),hashMap.getOrDefault(X.charAt(i),0)+1);
        }
        for (int i = 0; i < Y.length(); i++) {
            if(hashMap.getOrDefault(Y.charAt(i),0) > 0){
                queue.add(Y.charAt(i));
                hashMap.put(Y.charAt(i),hashMap.get(Y.charAt(i))-1);
            }
        }
        if(queue.isEmpty()) return ""+-1;
        if('0' == queue.peek()) return ""+0;
        int size = queue.size();
        for (int i = 0; i < size; i++) {
            answer.append(queue.poll());
        }
        return answer.toString();
    }
}

다른 사람 풀이

public class Main {
    public static void main(String[] args) {
        System.out.println(solution("1002", "30005"));  // 2
        System.out.println(solution("100"	,"2345"));  // 2
        System.out.println(solution(	"12321", "42531")); // 5
        System.out.println(solution("100",	"123450")); // 0
    }
    public static String solution(String X, String Y) {
        StringBuilder answer = new StringBuilder();
        int[] x = {0,0,0,0,0,0,0,0,0,0};
        int[] y = {0,0,0,0,0,0,0,0,0,0};
        for(int i=0; i<X.length();i++){
            x[X.charAt(i)-48] += 1;
        }
        for(int i=0; i<Y.length();i++){
            y[Y.charAt(i)-48] += 1;
        }

        for(int i=9; i >= 0; i--){
            for(int j=0; j<Math.min(x[i],y[i]); j++){
                answer.append(i);
            }
        }
        if("".equals(answer.toString())){
            return "-1";
        }else if(answer.toString().charAt(0)==48){
            return "0";
        }else {
            return answer.toString();
        }
    }
}
728x90
반응형