https://school.programmers.co.kr/learn/courses/30/lessons/131128
class Solution {
public String solution(String X, String Y) {
String answer = "";
List<String> pairList = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for(int i=9; i>=0; i--){
if(X.contains(i+"") && Y.contains(i+"")){
int xPairLength = X.length() - X.replace((i+""),"").length();
int yPairLength = Y.length() - Y.replace((i+""),"").length();
int min = Math.min(xPairLength,yPairLength);
for(int j=0; j<min; j++) {
sb.append(i);
}
}
}
answer = sb.toString();
if(answer.equals("")){
answer = "-1";
} else if(answer.charAt(0) == '0'){
answer = "0";
}
return answer;
}
}
X와 Y는 숫자로만 이루어져 있기 때문에 시간을 고려해서 1~9까지 for문을 돌면서 양쪽 다 포함하고 있다면 몇 개가 겹치는지 replace를 통해 확인한다. 변환 후 줄어든 길이만큼 해당하는 숫자가 존재한다는 뜻이고 X와 Y 중에 줄어든 길이가 더 작은 만큼 for문을 한번 더 돌면서 StringBuilder에 추가해 준다. 이번 문제에서 신경 써야 했던 부분이 시간초과인데, 처음에는 X와 Y에서 해당하는 숫자를 하나씩 지워주는 방식으로 했는데 X와 Y의 길이가 길어지니 시간초과가 떴다. 그래서 직접 X와 Y를 수정하는 것보다 길이를 비교하는 코드를 선택했다. 그리고 시간을 조금 더 줄이기 위해 StringBuilder도 사용했다.
'개발일지' 카테고리의 다른 글
20231226 - 프로그래머스/140108 (0) | 2023.12.26 |
---|---|
20231221 - cascade, orphanRemoval (1) | 2023.12.21 |
20231219 - 엔티티 연관관계(게시물, 유저, 댓글) (0) | 2023.12.19 |
20231218 - 페이징 구현 (0) | 2023.12.18 |
20231217 - Errors (1) | 2023.12.18 |