코딩응급실
프로그래머스: 숫자 짝꿍 본문
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}; //10자리 수
int[] y = {0,0,0,0,0,0,0,0,0,0};
// 각 숫자 문자열(X와 Y)의 빈도수를 계산하여 x와 y 배열에 저장함
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;
}
// 두 숫자에 공통으로 나타나는 가장 큰 수를 찾기 위해 각 숫자의 빈도수를 비교하면서,
// 빈도수가 더 작은 쪽을 기준으로 해당 숫자를 answer에 추가합니다.
/*
X: "12321"
Y: "42531" 일 때
{0, 2, 2, 1, 0, 0, 0, 0, 0, 0}
{0, 1, 1, 1, 1, 1, 0, 0, 0, 0}
*/
for(int i=9; i >= 0; i--){
for(int j=0; j<Math.min(x[i],y[i]); j++){
// min은 1, 1, 1이기 때문이다.
answer.append(i); // 3 들어감, 2 들어감, 1들어감
}
}
/*
만약 answer가 빈 문자열이면, 두 숫자에 공통된 숫자가 없다는 것이므로 -1을 반환합니다.
그렇지 않고, answer의 첫 번째 문자가 '0'이라면 결과는 0이 되어야 하므로 "0"을 반환합니다.
그렇지 않으면 answer를 문자열로 변환하여 반환합니다.
*/
if("".equals(answer.toString())){
return "-1";
}else if(answer.toString().charAt(0)==48){
return "0";
}else {
return answer.toString();
}
}
public static void main(String[] args) {
String X = "12321";
String Y = "42531";
Solution sol = new Solution();
String result = sol.solution(X, Y);
System.out.println(result);
}
}
레벨 1 문제가 맞나싶다. 약간 버거운 느낌이 든다.
단순히 빈도수를 찾아서 거꾸로 검사해서 큰 수를 문자열의 형태로 저장하는 것이다.
'Java' 카테고리의 다른 글
프로그래머스: 신고 결과 받기 (0) | 2024.01.20 |
---|---|
프로그래머스: 성격 유형 검사하기 (0) | 2024.01.20 |
프로그래머스: 삼총사 (0) | 2024.01.20 |
프로그래머스: 콜라 문제 (0) | 2024.01.20 |
프로그래머스: 옹알이2 (머쓱아 왜 태어났니...) (0) | 2024.01.20 |