https://school.programmers.co.kr/learn/courses/30/lessons/64065
풀이 - 나의 생각
튜플을 보면
숫자가 하나씩 늘어나는 것을 볼 수 있는데
길이가 늘어났을 때
새로운 숫자가
늘어난 길이 = index에 해당하는 값이다.
위의 그림처럼
문자열을 길이 순으로 정렬 하고 보면
바로 보일 것이다.
그래서 Set을 사용해서 새로운 값이라면 Answer에 값을 넣으면
정답이 나오는 것을 볼 수 있을 것이다.
풀이
주어지는게 문자열이 아니라 배열이였으면 더욱 쉬웠을 텐데
짜증나게 문자열로 주어진다.
"{{4,2,3},{3},{2,3,4,1},{2,3}}"
이렇게 주어지면
저걸 나누는게 1번이다.
이걸위해 split을 정규형과 함께 사용했다.
String[] parts = s.substring(2, s.length() - 2).split("\\},\\{");
일단 첫번째, 두번째 "{" , 맨 뒤와 그 앞의 "}"을 substring으로 날립니다.
그러면
4,2,3},{3},{2,3,4,1},{2,3
이렇게 남겠죠?
그러면
나머지를 }, { 를 기준으로 나눠줍니다.
그러면
4,2,3 / 3 / 2,3,4,1 / 2,3 으로 나눠지겠죠?
그럼 2번째 입니다.
나눠진 문자열의 길이 순으로 정렬을 해줍니다.
Arrays.sort(parts,(a,b) -> (a.length() - b.length()));
이렇게 하면
3 / 2,3 / 4,2,3 / 2,3,4,1 순으로 정렬이 됩니다!
그러면 나머지는 식은 죽 먹기죠?
코드
import java.util.*;
class Solution {
public int[] solution(String s) {
/*
중복 가능, 순서 의미 있음
arr[배열의 길이-1]에서 새로운 값은 배열의 길이 - 1 위치한다.
*/
String[] parts = s.substring(2, s.length() - 2).split("\\},\\{");
Set<String> set = new HashSet<>();
int size = parts.length, index = 0;
int[] answer = new int[size];
Arrays.sort(parts,(a,b) -> (a.length() - b.length()));
for(String part : parts){
for(String num : part.split(",")){
if(set.add(num)) answer[index++] = Integer.parseInt(num);
}
}
return answer;
}
}
'프로그래머스 > Lv.2' 카테고리의 다른 글
Summer/Winter Coding(~2018) > 스킬트리 - JAVA (0) | 2024.01.11 |
---|---|
코딩테스트 연습 > 땅따먹기 - JAVA (1) | 2024.01.11 |
코딩테스트 연습 > 주식 가격 - JAVA (0) | 2024.01.10 |
Summer/Winter Coding(~2018) > 방문 길이 - JAVA (0) | 2024.01.10 |
코딩테스트 연습 > 뒤에 있는 큰 수 찾기 - JAVA (0) | 2024.01.09 |