728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/64065
풀이 코드
주어진 집합을 길이를 기준으로 오름차순으로 정렬하여 길이가 제일 짧은 집합부터 순차적으로 모든 집합의 원소들을 순서를 유지하면서 중복을 허용하지 않는 LinkeHashSet에 add 해주면 튜플이 만들어지고 배열로 변환하여 반환하면 된다.
import java.util.*;
class Solution {
public int[] solution(String s) {
List<String> list = new ArrayList<>();
//괄호를 제거하여 각 집합을 숫자와 ,로 이루어진 문자열로 만든다.
int start = 2;
for(int end = 2; end < s.length()-1; end++) {
if(s.charAt(end) == '}'){
list.add(s.substring(start, end));
start = end+3;
}
}
//집합을 길이를 기준으로 오름차순으로 정렬한다.
Collections.sort(list, (s1, s2) -> s1.length() - s2.length());
//중복을 허용하지 않는 Set 자료구조를 사용하여 튜플을 만든다.
//순서를 유지해야하기 떄문에 LinkedHashSet 사용
Set<Integer> set = new LinkedHashSet<>();
//집합의 원소들을 차례대로 set에 add한 결과는 튜플이다.
for(String str : list) {
StringTokenizer st = new StringTokenizer(str, ",");
while(st.hasMoreTokens()) {
set.add(Integer.parseInt(st.nextToken()));
}
}
//반환 타입이 배열이기 때문에 set을 배열로 변환하여 반환한다.
List<Integer> temp = new ArrayList<>(set);
int[] answer = new int[temp.size()];
for(int i = 0; i < temp.size(); i++) {
answer[i] = temp.get(i);
}
return answer;
}
}
참고
문자열의 괄호를 제거하여 각 집합을 숫자와 ,로 이루어진 문자열로 만드는 코드는 정규표현식을 사용하여 작성할 수도 있다.
import java.util.*;
class Solution {
public int[] solution(String s) {
//괄호를 제거하여 각 집합을 숫자와 ,로 이루어진 문자열로 만든다.
String[] arr = s.replaceAll("[{}]", " ").trim().split(" , ");
//집합을 길이를 기준으로 오름차순으로 정렬한다.
Arrays.sort(arr, (s1, s2) -> s1.length() - s2.length());
...
}
}
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 피보나치 수 - 자바(Java), 메모이제이션 (0) | 2022.01.04 |
---|---|
[프로그래머스] 카펫 - 자바(Java) (0) | 2022.01.03 |
[프로그래머스] 행렬 테두리 회전하기 - 자바(Java), 구현, 2021 Dev-Matching: 웹 백엔드(상반기) (0) | 2021.10.21 |
[2019 KAKAO BLIND RECRUITMENT] 오픈채팅방 - 자바(Java) (0) | 2021.10.15 |
[2020 KAKAO BLIND RECRUITMENT] 문자열 압축 - 자바(Java) (0) | 2021.10.15 |
댓글