https://school.programmers.co.kr/learn/courses/30/lessons/131128
문제 접근
StringBuilder가 데이터를 붙이는 식이라 String보다 연산 속도가 빠르다고하여 StringBuiler를 썼으나 내 방법은 끝까지 시간 초과가 걸렸다.
* 참고한 풀이
아스키코드를 활용하여 x, y배열에 문자열 X, Y의 숫자를 카운팅한게 인상적
import java.util.*;
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}; // 숫자가 0~9라서 0이 10개, new int[10]로도 가능하나
int[] y = {0,0,0,0,0,0,0,0,0,0}; // 이게 더 직관적으로 보이긴 함
for(int i=0; i<X.length();i++) x[X.charAt(i)-48] += 1; // x[] 배열에 숫자 카운팅
for(int i=0; i<Y.length();i++) y[Y.charAt(i)-48] += 1;
for(int i=9; i >= 0; i--){ // 큰 수부터 저장하기 위함
for(int j=0; j<Math.min(x[i],y[i]); j++){ // 두 수의 최소값이 중복 수가 들어간 횟수
answer.append(i); // StriugBuilder 문자열 붙이기
}
}
if(answer.toString().isEmpty()) return "-1"; // 값 없을 때, toString이 StringBuilder 값 사용
else if(answer.toString().charAt(0) == '0') return "0"; // 0으로 시작 시
else return answer.toString();
}
}
시간 초과한 내 풀이
public String solution(String X, String Y) {
StringBuilder answer = new StringBuilder();
ArrayList<String> xArr = new ArrayList<>();
ArrayList<String> yArr = new ArrayList<>();
for (int i = 0; i < X.length(); i++) xArr.add(String.valueOf(X.charAt(i)));
for (int i = 0; i < Y.length(); i++) yArr.add(String.valueOf(Y.charAt(i)));
ArrayList<Integer> sum = new ArrayList<>();
for(int i=0; i<xArr.size(); i++) {
for(int j=0; j<yArr.size(); j++) {
if(xArr.get(i).equals(yArr.get(j))) {
sum.add(Integer.valueOf(xArr.get(i)));
xArr.remove(i);
yArr.remove(j);
i=0;
j=0;
}
}
}
Collections.sort(sum);
for (int i = sum.size() - 1; i >= 0; i--) answer.append(sum.get(i));
if(answer.toString().isEmpty()) return "-1";
else if(answer.charAt(0) == '0') return "0";
else return answer.toString();
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 / 최소직사각형 / JAVA / 완전탐색] (0) | 2023.02.03 |
---|---|
[프로그래머스 / 성격 유형 검사하기 / JAVA] (0) | 2023.02.01 |
[프로그래머스 / 삼총사 / JAVA] (0) | 2023.01.27 |
[프로그래머스 / 옹알이(2) / JAVA] (0) | 2023.01.27 |
[프로그래머스 / 햄버거 만들기 / JAVA] (0) | 2023.01.24 |
댓글