(Java)프로그래머스 - 숫자 짝궁

윤준혁·2024년 3월 5일

나의 풀이

import java.util.*;

class Solution {
    public String solution(String X, String Y) {
        HashMap<Character, Integer> map = new HashMap<>(); // 1
        for (char c : X.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }

        StringBuilder sb = new StringBuilder(); // 2
        for (char c : Y.toCharArray()) {
            if (map.containsKey(c) && map.get(c) > 0) {
                sb.append(c);
                map.put(c, map.get(c) - 1);
            }
        }

        String answer = sb.toString(); // 3
        if (answer.isEmpty()) {
            return "-1";
        } else {
            char[] answerArray = answer.toCharArray();
            Arrays.sort(answerArray);
            for (char c : answerArray) {
                if (c != '0') return new StringBuilder(new String(answerArray)).reverse().toString();
            } 
            return "0";
        }
    }
}

과정

  1. 문자열 X의 각 문자를 키로 가지고 해당 문자의 빈도수를 밸류값으로 가지는 해시맵을 생성하고, 문자열 X의 각 문자를 해시맵에 추가하고, 이미 존재하는 문자라면 그 문자의 빈도수를 1 증가시킨다
  2. 문자열 Y를 순회하고 각 문자가 해시맵에 존재하는지 확인한다. 존재한다면 결과 문자열에 추가하고 빈도수 1 감소
  3. answer이 비어있다면 -1을 리턴, answer이 0이외에 다른 문자열이 포함되어 있으면 answer리턴, 아니면 0을 리턴한다

다른 사람 풀이

class Solution {
    public 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();
        }
    }
}
  • 배열을 생성하고, 아스키코드를 참조한듯하다. 시간 복잡도가 훨씬 효율적이다

0개의 댓글