난이도: Lv.2
문제: https://school.programmers.co.kr/learn/courses/30/lessons/64065
알고리즘
1. 각 집합을 배열로 split 한다.
2. 1.의 결과인 집합 배열들을 배열의 길이를 기준으로 오름차순 정렬한다.
3. 각 배열의 원소들을 정답 Set에 입력한다.
코드
function solution(s) {
const answer = new Set();
// 각 집합을 배열로 분리
s = s.substring(1, s.length - 1);
const split = s.split('},{');
split[0] = split[0].replace('{', '');
split[split.length - 1] = split[split.length - 1].replace('}', '');
for (let i = 0; i < split.length; i++) {
split[i] = split[i].split(',');
}
// 각 배열의 길이를 기준으로 오름차순 정렬
split.sort((a, b) => a.length - b.length);
// 배열의 각 원소를 정답 Set에 삽입
for (let set of split) {
for (let element of set) {
answer.add(Number(element));
}
}
return Array.from(answer);
}
주저리
처음에 집합을 배열로 분리할 때 s 문자열의 문자 하나씩 읽어서 하다가 원소가 두 자릿수 이상이면 제대로 동작 안 한다는 걸 깨닫고 위와 같이 고치니 정말 간단하게 해결됐다. 근데 Set에 집어넣으면서 이거 n! 아닌가 생각이 들었지만 도저히 이 방법밖에 생각 안 나서 그냥 해봤더니 통과했다. 근데 여기 쓰면서 생각해 보니까 n! 이 아니라 시그마 n 이니까 n^2 인 것 같다.
'코딩테스트' 카테고리의 다른 글
[JS] 프로세스 (1) | 2023.12.20 |
---|---|
[JS] 기능개발 (1) | 2023.12.18 |
[JS] [1차] 캐시 (0) | 2023.12.11 |
[JS] 의상 (0) | 2023.12.10 |
[JS] H-Index (0) | 2023.12.08 |