오늘의 문제는 스택/큐에 관한 문제였다.

스택과 큐는 자료구조를 공부할 때 가장 처음 접한 개념이였기 때문에 알고 있었다.

스택은 FILO, 큐는 FIFO의 형태를 지닌다.

 

본 문제에서는 스택 자료구조를 구현하며 스택의 특징을 이용하여 문제를 풀었다.

새로운 배열에 기존 배열의 요소들이 하나씩 쌓여져 가는 과정에서 스택 자료구조를 생각할 수 있었다.

처음에 주어진 배열의 요소들을 순회하며 한 개씩 새로운 배열에 넣는 작업부터 시작하였다.

다음 작업으로는 순차적으로 요소를 넣는 과정에서 가장 마지막으로 들어간 요소와 새로 삽입할 요소가 같은 값일 경우에는 새로 삽입한 요소가 새로운 배열의 마지막에 삽입되었다가 가장 먼저 나오는 형태를 띄기 때문에 FIFO를 충족하게 된다.

위와 같은 과정을 반복하다 보면 중복되는 값은 사라지고 정답에 해당하는 요소들만 남게 된다.

function solution(arr)
{
    const answer = [];
    arr.map(e => {
        if(answer[answer.length-1] !== e){
            answer.push(e)
        }
    })
    return answer;
}

처음에는 무작정 주어진 두 배열을 순회하면서 요소를 하나씩 비교한 후 일치하지 않는 요소 값을 반환하는 코드를 작성하였다.

하지만 당연히 효율적이지 못했고 풀어내기에 어려움이 있었다.

해시라는 자료구조를 처음으로 공부해보고 Map을 사용하여 주어진 배열들을 순회하며 조건을 충족하지 못하는 요소만 반환하도록 코드를 작성하여 풀어보았다.

function solution(participant, completion) {
    const PHash = new Map();
    const arr = participant.forEach(e => {
        if(PHash.has(e)){
            PHash.set(e,PHash.get(e) + 1)
        }else{
            PHash.set(e,1)   
        }
    });
    const answerArr = completion.map(e => {
        PHash.set(e, PHash.get(e) - 1)
        if(PHash.get(e) === 0){
            PHash.delete(e)
        }
    })
    return [...PHash][0][0]
}

+ Recent posts