성능 요약
-
메모리: 76.2 MB, 시간: 0.38 ms - Answer Code1(2022.02.10)
-
메모리: 75.2 MB, 시간: 0.69 ms - Answer Code2(2022.02.10)
구분
- 코딩테스트 연습 > 2019 카카오 개발자 겨울 인턴십
Answer Code1(2022.02.10)
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Arrays;
class Solution {
public ArrayList<Integer> solution(String s) {
ArrayList<Integer> answer = new ArrayList<>();
s = s.substring(2, s.length());
s = s.substring(0, s.length() -2).replace("},{", "-");
String str[] = s.split("-");
Arrays.sort(str, new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.length() - s2.length(); // return Integer.compare(o1.length(), o2.length());
}
});
for(String x : str) {
String [] temp = x.split(",");
for(int i = 0; i < temp.length; i++) {
int n = Integer.parseInt(temp[i]);
if(!answer.contains(n)) {
answer.add(n);
}
}
}
return answer;
}
}
문제 풀이
-
튜플을 만들 ArrayList 객체를 선언하고, 가장 앞에 있는
{{
부분과 가장 뒤에 있는}}
부분을 제거한다. => substring() 메서드를 사용하여 제거한다. -
{,}
형태의 문자열을-
으로 바꾼다. =>replace("},{", "-")'
-
위에서 바꾼 문자열
-
을 기준으로 구분해준다. =>.split("-");
-
원소들의 길이를 기준으로 정렬한 뒤 가장 짧은 원소부터 고려하며 튜플을 채워나간다.
-
예)
"{{2},{2,1},{2,1,3},{2,1,3,4}}"
인 경우 가장 짧은 원소인{2}
부터 시작해서 채워나간다. -
java.util.Arrays
유틸리티 클래스를 사용하여Arrays.sort()
메서드를 통해 오름차순 정렬을 해준다. -
원하는 정렬 조건을 만들기 위해서는
import java.util.Comparator
클래스내compare()
메서드를 사용한다. -
반복문을 이용하여
,
을 기준으로 구분(split(",")
)하여 새로운 문자열 배열을 만든다. -
그리고 안에 반복문을 이용하여 각 문자열 값을 정수로 바꾼다. =>
Integer.parseInt();
-
튜플에 들어있는 값이 아니라면 추가한다. =>
.contains()
,.add()
-
Answer Code2(2022.02.10)
import java.util.*;
class Solution {
public int[] solution(String s) {
Set<String> set = new HashSet<>();
String[] arr = s.replaceAll("[{]", " ").replaceAll("[}]", " ").trim().split(" , ");
Arrays.sort(arr, (a, b)->{return a.length() - b.length();});
int[] answer = new int[arr.length];
int idx = 0;
for(String s1 : arr) {
for(String s2 : s1.split(",")) {
if(set.add(s2)) answer[idx++] = Integer.parseInt(s2);
}
}
return answer;
}
}
Review
-
첫 번째 풀이 :해당 문자열을 구분하기 위해 필요한 부분들을 제거한 뒤, 나만의 기준으로(
-
) 문자열을 구분해주는 것에 대한 아이디어를 쉽게 떠올리지 못했다.-
그리고 나눠진 문자열 배열을 오름차순으로 정렬하는 것은 알겠는데, 코드로 구현하는 것을 몰라서 구글링을 하게 됐다.
-
아직은 문제를 많이 풀지 못했기 때문에 알고리즘 구현 실력이 제대로 갖추지 못했지만, 꾸준히 하다보면 성장하는 날이 올거라 생각한다.
-
해당 문제는 1주일 내로 다시 풀어보자.
-
-
두 번째 풀이는 가장 많은 좋아요 수를 받은 풀이 방법이다.
replaceAll()
메서드랑 Set 인터페이스를 구현한 가장 대표적인 컬렉션인 HashSet 를 이용한 것도 기억해두자.