728x90
[Java] 프로그래머스 : 숫자 짝꿍
https://school.programmers.co.kr/learn/courses/30/lessons/131128
접근
주어진 두 수에서 공통으로 나타나는 정수 세 개를 찾아내고, 그 숫자들로 만들 수 있는 가장 큰 세자리 정수가 무엇인지 알아내야 한다. 짝이 없으면 -1을, 짝이 0으로만 구성되면 0을 출력해야 한다.
짝을 만들 때, 각각의 값을 기존 값에서 제외시키도록 해야 한다.
예를들어, X = 5525, Y = 1255면 X에는 5가 3개, Y에는 5가 2개이므로 X쪽에 있는 5 하나는 짝을 짓지 못하게 된다.
X와 Y의 각 자릿 수가 각각 몇 번 나타나는지 체크하고, 더 작은 값을 취한다면 위의 문제를 해결할 수 있을 것이다.
해시맵을 사용하거나 배열을 사용해서 문제를 푸는 것이 정석인 것 같다.
answer는 String 값의 더하기 연산이 필요한 것으로 보아, 단순 문자열 덧셈보다 StringBuilder를 활용하는 것이 효율적으로 보인다.
코드
import java.util.*;
class Solution {
public String solution(String X, String Y) {
StringBuilder sb = new StringBuilder();
int[] xArr = new int[10];
int[] yArr = new int[10];
for (int i = 0; i < X.length(); i++) {
xArr[Character.getNumericValue(X.charAt(i))]++; // char to int
}
for (int i = 0; i < Y.length(); i++) {
yArr[Character.getNumericValue(Y.charAt(i))]++;
}
for (int i = 9; i >= 0; i--) { // 세 정수의 최댓값이므로 역순으로 전개
for (int j = 0; j < Math.min(xArr[i], yArr[i]); j++) { // 두 값중 최솟값을 취하면 짝이 맞는 최대 숫자를 구할 수 있다.
sb.append(String.valueOf(i));
}
}
if(sb.toString().equals("")) return "-1";
else if (sb.toString().charAt(0) == '0') return "0"; // 구해진 답이 00, 000과 같은 경우에 0으로 return 하도록 한다.
else return sb.toString();
}
}
728x90
'알고리즘 문제 풀이' 카테고리의 다른 글
[Java] 프로그래머스 : 체육복 (0) | 2023.08.03 |
---|---|
[Java] 프로그래머스 : 옹알이(2) (0) | 2023.08.02 |
[Java] 프로그래머스 : 로또의 최고 순위와 최저 순위 (0) | 2023.08.01 |
[Java] 프로그래머스 : K번째 수 (0) | 2023.07.21 |
[Java] 백준 2206 : 벽 부수고 이동하기 (0) | 2023.07.20 |