코딩테스트
[프로그래머스] 숫자 짝꿍
mhui123
2025. 4. 2. 18:21
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131128
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
주어진 X, Y는 정수형태로 된 문자열이며, X 와 Y에 공통으로 등장하는 개수만큼 숫자를 사용하여 만들 수 있는 최대값을 반환하는 문제이다.
제한사항
* 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다.
* X, Y는 0으로 시작하지 않습니다.
* X, Y의 짝꿍은 상당히 큰 정수일 수 있으므로, 문자열로 반환합니다.
접근
X Y 각각 0 ~ 9 까지의 숫자 갯수를 세고 int[10]에 담은 후 각 숫자별로 공통으로 갖고 있는 숫자를 갯수만큼 사용하여 answer에 붙여 반환한다.
public String solution(String X, String Y) {
int[] xCnt = new int[10];
int[] yCnt = new int[10];
for( char c : X.toCharArray()){
xCnt[c - '0'] ++;
}
for( char c : Y.toCharArray()){
yCnt[c - '0'] ++;
}
StringBuilder answer = new StringBuilder();
//최대값 생성 : 9 ~ 0 까지 붙이기
for(int num = 9; num >= 0; num --){
int v = Math.min(xCnt[num], yCnt[num]); // X Y 에 존재하는 num의 갯수
//존재하지 않는 수는 연산되지 않음
// for( int i = 0; i < v; i ++){
// answer.append(num);
// }
answer.append(String.valueOf(num).repeat(Math.max(0, v)));//num을 0 과 v값 중 큰 값만큼 반복해 부착.
}
//예외처리
if(answer.length() == 0){
answer = new StringBuilder("-1");
} else if(answer.charAt(0) == '0') {
answer = new StringBuilder("0");
}
return answer.toString();
}
알게된 점
1. char 끼리의 연산 결과는 askii 코드로 계산되어 정수값이다.
ex) char c = '9'; // 57
xCnt[ c - '0' ] -> xCnt[9]
2. StringBuilder a.append("x").repeat(v) 는 "x"를 a 에 v회만큼 붙인다.
반응형