728x90
[Javascript] (프로그래머스 level 2) 튜플
💡 구글에 Javascript 풀이가 많이 없거나, 배운 점이 있으면 포스팅합니다.
내 풀이
function solution(s) {
// {가 시작되면 }가 나올때까지 temp에 담는다.
// 이temp를 temps에 담는다.
const temps = [];
for (let i = 1; i < s.length; i++) {
if (s[i] === '{') {
const nums = getNums(s, i)
temps.push(nums);
}
}
// length가 작은애들 순서로 정렬한다.
// 그리고 각 원소를 answer 배열에 담는다.
temps.sort((a,b) => a.length - b.length)
const answer = [];
answer.push(temps[0][0])
for (let i = 1; i < temps.length; i++) {
const curArr = temps[i];
const curValue = curArr.filter((x) => !answer.includes(x))[0]
answer.push(curValue)
}
return answer;
}
function getNums(s, i) {
const temp = [];
let nums = ''
for (let j = i + 1; j < s.length; j++){
if (s[j] === '}') {
temp.push(parseInt(nums));
return temp;
}else if (s[j] === ',') {
temp.push(parseInt(nums))
nums = ''
continue
} else {
nums += s[j]
}
}
return temp
}
정직하게 {일때 시작되고, 콤마로 숫자 나누고, 배열에 담고 이런식으로 했는데요…. 밑에 다른 사람 풀이 보면 그 모든 작업을 마법의 한 메서드로 해결했습니다.
다른 사람 풀이
function solution(s) {
return JSON.parse(s.replace(/{/g, '[').replace(/}/g, ']'))
.sort((a, b) => a.length - b.length)
.reduce((arr, v, n) => {
if (n) {
return arr.concat(v.filter(f => !arr.includes(f)));
}
return v;
}, []);
}
이 풀이를 보고 살짝 멘붕왔는데요 ㅋㅋ JSON.parse를 자주 사용하지만 이렇게 스트링으로 이루어진 자료구조를 자바스크립트 자료구조로 해석해주는 것으로 코테에서 사용하게 될줄은 생각지도 못했네요.
왜 굳이 직접 parsing을 구현한걸까요… 허허허
sorting된 자료구조를 reduce로 갖다 붙이는것도 신기하네요.
배운 점, 느낀 점
담음에 파싱문제를 만나면 꼭 JSON.parse를 사용해봐야겠습니다. 거기다 reduce를 특정 값을 만들때 뿐만아니라 배열을 제어하는데도 사용해봐야겠습니다.
'Coding Test > JavaScript' 카테고리의 다른 글
[Javascript] (프로그래머스 level 2) n^2 배열 자르기 (0) | 2022.12.15 |
---|---|
[Javascript] (프로그래머스 level 2) 캐시 (0) | 2022.11.22 |
[Javascript] (프로그래머스 level 2) h-index (0) | 2022.11.22 |
[Javascript] (프로그래머스 level 2) 멀리 뛰기 (0) | 2022.11.21 |
[Javascript] (프로그래머스 level 2) 점프와 순간이동 (0) | 2022.11.21 |
[Javascript] DFS 부분집합 만들기 (0) | 2022.11.08 |
[Javascript] (DFS) 깊이 우선 탐색 - 전위 순회, 중위 순회, 후위 순회 (0) | 2022.11.08 |
[Javascript] (재귀) 이진수 만들기 (1) | 2022.11.08 |
댓글