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
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 프로그래머스 ( Programmers )' 카테고리의 다른 글
[프로그래머스(Programmers)][Java,Python] (Lv1) 햄버거 만들기 (0) | 2025.03.20 |
---|---|
[프로그래머스(Programmers)][Java,Python] (Lv1) 명예의 전당 (1) (0) | 2025.03.19 |
[프로그래머스(Programmers)][Java,Python] (Lv1) 이웃한 칸 (PCCE 기출문제 9번) (0) | 2025.03.18 |
[프로그래머스(Programmers)][Java,Python] (Lv1) 대충 만든 자판 (0) | 2025.03.18 |
[프로그래머스(Programmers)][Java,Python] (Lv1) 둘만의 암호 (0) | 2025.03.11 |