코딩테스트 연습 - 튜플 | 프로그래머스 스쿨 (programmers.co.kr)
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문자열 s가 표현하는 튜플을 배열에 담아 반환하시오.
예를 들어 s = “{{2}, {2,1}, {2,1,3}, {2,1,3,4}}” 이면 튜플은 (2, 1, 3,4)가 된다.
다음으로 s = "{{1,2,3}, {2,1}, {1,2,4,3}, {2}}” 역시도 튜플은 (2, 1, 3, 4)이다.
문자열을 잘 분리하는 것이 핵심이다.
"{{1,2,3}, {2,1}, {1,2,4,3}, {2}}” 를 기준으로 생각해 보자. 각 집합을 구분하는 구분자는 “,”이다. 그렇지만 “,”를 기준으로 나누면 집합 내의 ‘,’의 존재 때문에 안된다.
따라서 ”},”를 기준으로 나누면 어떨까? 우선 시작과 끝의 “{”, “}” 는 없애고 본다.
"{1,2,3}, {2,1}, {1,2,4,3}, {2”
“{1, 2, 3” , “{2, 1”, {1, 2, 4, 3”, “{2”이가 된다.
이제 이거를 숫자의 개수를 기준으로 정렬을 해야 한다.
즉 [”2”, “2, 1”, “1, 2, 3”, “1, 2, 4, 3”] 으로 만들어야 튜플을 구할 수 있다.
- substring을 통해 문자열을 잘라낸다.
- 그 후 구분자룰 “},”로 삼아 문자열을 배열로 분리한다.
- 길이 순으로 오름차순 정렬을 한다.
- Set을 통해 중복된 숫자 처리를 한다. LinkedHashSet을 사용해 삽입 순서를 유지해 해당 set을 통해 정답을 구성하겠다.
import java.util.*;
class Solution {
public int[] solution(String s) {
s = s.substring(1, s.length() - 2);
String[] splited = s.split("},");
Arrays.sort(splited, (a, b) -> Integer.compare(a.length(), b.length()));
for (int i = 0; i < splited.length; i++) {
splited[i] = splited[i].substring(1);
}
Set<Integer> set = new LinkedHashSet<>();
for (String words : splited) {
for (String num : words.split(",")) {
int v = Integer.parseInt(num);
if (set.contains(v)) continue;
set.add(v);
break;
}
}
return set.stream().mapToInt(Integer::intValue).toArray();
}
}
'Algorithm > Programmers' 카테고리의 다른 글
Programmers 42577 - 전화번호 목록 (0) | 2024.10.24 |
---|---|
Programmers 62050 - 지형 이동 (0) | 2024.10.23 |
Programmers 60062 - 외벽점검 (0) | 2024.10.20 |
Programmers 92342 - 양궁대회 (0) | 2024.10.02 |
Programmers 12952 - N-Queen (0) | 2024.10.01 |