728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131128
문제 설명
풀이 방법
X, Y 각 배열에 숫자별 갯수를 카운팅한다
내림차순을 위해 배열을 역순으로 순회하며 중복된 갯수인 만큼 이어붙인다.
"00" 과 같은 케이스에 대한 예외처리를 진행한다.
내 코드(JAVA)
public String solution(String X, String Y) {
StringBuilder answer = new StringBuilder();
int[] xArr = new int[10];
int[] yArr = new int[10];
// 문자열 안 문자 갯수 카운팅 | "0012" -> [2, 1, 1, 0, 0, 0, 0, 0, 0, 0]
for (char ch : X.toCharArray()) {
xArr[ch - '0']++;
}
for (char ch : Y.toCharArray()) {
yArr[ch - '0']++;
}
// 내림차순을 위해 역순으로 순회
for (int i = xArr.length - 1; i >= 0; i--) {
while (xArr[i] > 0 && yArr[i] > 0) { // 중복된 갯수만큼 문자열 이어붙이기
answer.append(i);
if (xArr[i] > 0) xArr[i]--; // -1 누적
if (yArr[i] > 0) yArr[i]--; // -1 누적
}
}
// 자릿수가 2자리 이상인데, 맨 앞이 0이라면 "00~~"
if (answer.length() > 1 && answer.indexOf("0") == 0) {
answer = new StringBuilder("0");
}
return answer.length() == 0 ? "-1" : answer.toString();
}
처음엔 indexOf(), deleteCharAt() 과 같은 방법으로 풀려고했다.
복잡도를 생각하자
728x90
반응형
'알고리즘' 카테고리의 다른 글
[LeetCode/JAVA] 20. Valid Parentheses (0) | 2023.12.03 |
---|---|
[프로그래머스/JAVA] [PCCE 기출문제] 10번 / 데이터 분석 (1) | 2023.11.28 |
[프로그래머스/JAVA] 크기가 작은 부분문자열 (1) | 2023.11.14 |
[프로그래머스/JAVA] 둘만의 암호 (1) | 2023.11.12 |
[프로그래머스/JAVA] 대충 만든 자판 (0) | 2023.11.12 |
댓글