728x90
이해하기
처음에 풀었던 방법은 다음과 같았다.
- s를 char 배열로 만든다.
- list를 두 개 만든다.
- for문으로 char 배열을 순회한다.
- c가'{'이 아니고 ','도 아니고, '}'도 ㅏ니라면 list2.add(c - '0')
- c가 '}'라면 해당 배열의 끝을 만난 것이라고 판단
- int 배열에 list2를 옮겨 담아서 list.add()
- list2.clear()
- list를 길이 순서대로 정렬
- for문을 돌며 answer에 들어있지 않은 숫자를 add
- return answer
사실상 스트링을 어떻게 배열로 만드는지가 제일 복잡하다고 생각됐다.
결국 오답이었구... ㅜㅅㅜ
다른 글들을 좀 찾아보니 내가 너무 어렵게만 생각했다.
참고한 블로그⬇️
s = "{{4,2,3},{3},{2,3,4,1},{2,3}}" 일 때, 일단 앞 뒤의 "{{"와 "}}"부터 떼어낸다.
그럼 s = "4, 2, 3},{3},{2,3,4,1},{2,3" 이 되는데 이 때 "},{"를 전부 "-" 같은 문자로 바꿔주고, s.split("-") 해준다.
이 때 만들어진 String 배열은 {"4,2,3", "3", "2,3,4,1", "2,3"}이다. 아직 ,(콤마)가 들어가 있는 상태다.
Arrays.sort()로 길이 순서대로 정렬해준다.
str = {"3", "2,3", "4,2,3", "2,3,4,1"}
이제 for문으로 순회하며 하나씩 받아온 후 다시 배열화한다.
e.g. "4,2,3" -> s.split(",") -> {"4", "2", "3"}
그런 다음 방금 만든 배열에서 숫자를 하나씩 가져와서 Integer화 한 후 만약 answer가 해당 숫자를 포함하지 않는다면 add해준다.
가장 다른 부분이 String 문자열을 배열화하는 부분같다.
좀 더 크게 봤어야 하는 문제 ~('~')~
문제풀이
import java.util.*;
class Solution {
public int[] solution(String s) {
ArrayList<Integer> answer = new ArrayList<>();
s = s.substring(2);
s = s.substring(0, s.length() - 2);
s = s.replace("},{", "-");
String[] str = s.split("-");
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.length()- o2.length();
}
});
for (String x : str) {
String[] tmp = x.split(",");
for (int i = 0; i < tmp.length; i++) {
int n = Integer.parseInt(tmp[i]);
if (!answer.contains(n)) {
answer.add(n);
}
}
}
return answer.stream().mapToInt(i -> i).toArray();
}
}
'JAVA > Coding Test Study' 카테고리의 다른 글
[Lv.2] 프로그래머스 - 가장 큰 수 : Java (0) | 2024.04.16 |
---|---|
[Lv.2] 프로그래머스 - 전화번호 목록 : Java (0) | 2024.04.16 |
[Lv.2] 프로그래머스 - H-Index : Java (0) | 2024.04.15 |
[Lv.3] 프로그래머스 - 단속카메라 : Java (0) | 2024.04.15 |
[Lv.2] 프로그래머스 - 큰 수 만들기 : Java (0) | 2024.04.15 |