FrontEnd/프로그래머스

[JS] 두 큐 합 같게 만들기

728x90

큐 구조를 직접 구현하여 해결하였다.

 

 

두 큐의 합이 같으려면 두 큐의 값을 모두 더한 이후 2로 나눈 값으로 만들어주는것이 문제해결을 위한 핵심 요소이다. 큐의 값을 그때그때 구하는것도 번거로우니 큐 구조를 구현할때 sum값을 하나 넣어두어서 합계도 바로바로 꺼내올 수 있도록 구현했다.

 

이후, 넉넉히 검사를 진행하게 하고 큐 구조들 중에서 합이 큰 큐에서 작은 큐로 값을 전해주는 방식으로 문제를 해결하였다.

 

 

class Node {
    constructor (val) {
        this.val = val
        this.next = null
    }
}

class Queue {
    constructor () {
        this.front = null
        this.size = 0
        this.end = null
        this.sum = 0
    }
    
    push (val) {
        const node = new Node(val)
        if (!this.size) {
            this.front = node
            this.end = node
        } else {
            this.end.next = node
            this.end = node
        }
        this.size ++
        this.sum += this.end.val
    }
    
    pop() {
        if(!this.size) return undefined
        const ret = this.front
        this.front = this.front.next
        this.size--
        this.sum -= ret.val
        return ret.val
    }
    
}


function solution(queue1, queue2) {
    const que1 = new Queue()
    const que2 = new Queue()
    
    for (const el of queue1) que1.push(el)
    for (const el of queue2) que2.push(el)
    
    const targetSum = (que1.sum +que2.sum)/2
    
    let ret = 0
    for (let i = 0 ; i < (que1.size+que2.size)*2 ; i++){
        if (que1.sum === targetSum) return ret
        if (que1.sum > que2.sum) que2.push(que1.pop())
        else que1.push(que2.pop())
        ret ++
    }
    return -1
    
    
}
728x90

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

[JS] 주차요금 계산  (0) 2023.06.08
[JS] 양궁대회  (0) 2023.06.08
[JS] 혼자 놀기의 달인  (0) 2023.06.08
연속 부분 수열 합의 개수  (0) 2023.06.06
[JS] 택배상자  (0) 2023.06.06