[프로그래머스(Programmers)][Java,Python] (Lv1) 숫자 짝꿍

728x90

 

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

1. Java

import java.util.*;
class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        HashMap<Character,Integer> x_map = new HashMap<>();
        for ( char c : X.toCharArray() ) {
            x_map.put(c, x_map.getOrDefault(c, 0) + 1);
        }
        HashMap<Character,Integer> y_map = new HashMap<>();
        for ( char c : Y.toCharArray() ) {
            y_map.put(c, y_map.getOrDefault(c, 0) + 1);
        }
        TreeMap<Character,Integer> a_map = new TreeMap<>(Collections.reverseOrder());
        for ( char c : x_map.keySet() ) { // Character
            if ( y_map.containsKey(c) ) {
                a_map.put(c, Math.min(x_map.get(c), y_map.get(c)));
            }
        }
        if ( a_map.size() == 0 ) {
            answer = "-1";
        } else {
            if ( a_map.firstKey() == '0' ) {
                answer = "0";
            } else {
                StringBuilder sb = new StringBuilder();
                for ( char c : a_map.keySet() ) { // Character
                    // sb.append((c+"").repeat(a_map.get(c)));
                    for ( int i = 0; i < a_map.get(c); ++i ) {
                        sb.append(c);
                    }
                }
                answer = sb.toString();
            }
        }
        return answer;
    }
}
더보기
// Case 11 ~ 15 시간초과

import java.util.*;
class Solution {
    public String solution(String X, String Y) {
        String answer = "";
        boolean[] y_chk = new boolean[Y.length()];
        List<Character> list = new ArrayList<>();
        for ( int i = 0; i < X.length(); ++i ) {
            for ( int j = 0; j < Y.length(); ++j ) {
                if ( y_chk[j] ) {
                    continue;
                }
                if ( X.charAt(i) == Y.charAt(j) ) {
                    y_chk[j] = true;
                    list.add(X.charAt(i));
                    break;
                }
            }
        }
        // list.retainAll(list_t) -- 중복 요소는 제거 안 됨
        if ( list.size() == 0 ) {
            answer = "-1";
        } else {
            Collections.sort(list,Collections.reverseOrder());
            for ( int i = 0; i < list.size(); ++i ) {
                if ( i == 0 && list.get(i) == '0' ) {
                    answer = "0";
                    break;
                }
                answer += list.get(i);
            }
        }
        return answer;
    }
}

 

2. Python

def solution(X, Y):
    answer = ''
    x_dict = {}
    y_dict = {}
    for c in X :
        # n = int(c)
        # x_dict[n] = x_dict.get(n,0) + 1
        x_dict[c] = x_dict.get(c,0) + 1
    for c in Y :
        # n = int(c)
        # y_dict[n] = y_dict.get(n,0) + 1
        y_dict[c] = y_dict.get(c,0) + 1
    a_dict = {}
    for c in x_dict :
        if y_dict.get(c) is not None :
            a_dict[c] = min(x_dict[c], y_dict[c])
    a_dict = dict(sorted(a_dict.items(), reverse=True))
    if len(a_dict) == 0 :
        answer = "-1"
    else :
        # if any(a_dict) :
        #   for n in a_dict :
        #       for i in range(a_dict[n]) :
        #           answer += str(n)
        # else :
        #   answer = "0"
        if list(a_dict)[0] == '0' :
            answer = "0"
        else :
            for c in a_dict :
                for i in range(a_dict[c]) :
                    answer += c
    return answer

 

※  boolean  vs  int

  *  Java : 
        boolean  not equals  int
  *  Python :
        True  equals  1
        False  equals  0
  *  C/C++ : 
        TRUE  equals  1
        FALSE  equals  0

 

반응형