본문 바로가기
Coding Test/JavaScript

[Javascript] (프로그래머스 level 2) 튜플

by Chaedie 2022. 11. 22.
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를 특정 값을 만들때 뿐만아니라 배열을 제어하는데도 사용해봐야겠습니다.

댓글