Level 2️⃣ - 튜플

2024. 4. 3. 20:44알고리즘/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/64065

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🚀문제 해석

우선 집합으로 들어오는 문자열을 배열의 형태로 포맷팅을 해야한다.

그리고 배열의 요소를 길이를 기준으로 오름차순 정렬을 한다.

그런 다음 첫번째 요소를 저장하고 그 다음 요소중에 첫번째 요소에 포함되지 않은 요소를 찾아주면 된다.

전체 과정을 예시로 설명하자면 다음과 같다.

{ {2, 1}, {2}, {1,2,3}, {1,2,4,3} } 이렇게 집합이 들어오면,

{ {2, 1}, {2}, {1,2,3}, {1,2,4,3} } ➡ [ [2, 1], [2], [1,2,3], [1,2,4,3] ] 배열로 바꾼다.

그리고 길이를 기준으로 오름차순 정렬을 한다. ➡ [ [2], [2,1], [1,2,3], [1,2,4,3] ]

첫번째 요소를 result에 저장하고 그 다음 요소중 첫번째 요소에 포함되지 않는 요소들을 찾아준다.

사실 이 마지막 과정을 구현하는 것이 가장 어려웠다. 머리로는 알겠는데 막상 코드로 구현하려니 상당히 애를 먹었다...

 

🛠코드 분석

어떤 의도로 코드를 작성했는지 분석해보자.

function solution(s) {
    const answer = [];
    
    let str = s.replace('{{',"").replace('}}',"").split("},{");
    let a = [];
    for(let i = 0; i<str.length; i++) a.push(str[i].split(','));
    a.sort((a, b)=> a.length - b.length);
    answer.push(Number(a[0][0]));
    for(let i = 1; i<a.length; i++){
        const e = solve(a[i], answer);
        answer.push(e);
    }
    return answer;
}

function solve(a, b){
    for (let i=0; i<b.length; i++){
         a = a.filter(ele=>ele!==String(b[i]));
    }      
    return Number(a[0]);
}

 

    let str = s.replace('{{',"").replace('}}',"").split("},{");
    let a = [];
    for(let i = 0; i<str.length; i++) a.push(str[i].split(','));

이 코드는 집합의 형태로 들어오는 문자열을 배열로 포맷팅하는 코드이다.

평소에 replace를 잘 사용하지 않았는데 이번 기회에 이렇게 사용할 수 있다는 것을 깨달았다.

 

function solve(a, b){
    for (let i=0; i<b.length; i++){
         a = a.filter(ele=>ele!==String(b[i]));
    }      
    return Number(a[0]);
}

이 부분이 구현하기 가장 까다로운 부분이었다.

filter 메서드를 사용해서 answer에 들어있지 않은 요소들을 걸러낸다.

그런다음 걸러진 요소를 다시 answer에 추가하면서 튜플을 완성하면 된다.

이 과정을 하나의 함수에 적으려고 하니 더 어려웠던 거 같다. 복잡한 기능을 수행한다면 함수로 분리해도 괜찮다.

'알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 2️⃣ - 방문길이  (0) 2024.04.07
Level 2️⃣ - 전화번호 목록  (1) 2024.04.05
Level 2️⃣ - 기능개발  (0) 2024.04.03
Level 2️⃣ - H-Index  (0) 2024.04.03
Level 2️⃣ - n^2 배열 자르기  (0) 2024.04.03