[programmers] Lv3. 이중우선순위큐 ​Javascript | Heap(힙) | protect-me

protect-me·2021년 8월 12일
0
post-thumbnail

🕊 Link

Lv3. 이중우선순위큐 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42628

🧑🏻‍💻 Code(javascript)

function solution(os) {
  const l = os.length
  const q = []

  os.forEach(o => {
    const [text, number] = o.split(" ")

    if (text == "I") {
      q.push(+number)
    } else if (text == "D" && number == "1") {
      const max = Math.max(...q)
      const index = q.indexOf(max)
      q.splice(index, 1)
    } else if (text == "D" && number == "-1") {
      const min = Math.min(...q)
      const index = q.indexOf(min)
      q.splice(index, 1)
    }
  })

  if (!q.length) return [0, 0]
  const max = Math.max(...q)
  const min = Math.min(...q)
  return [max, min]
}

💡 Solution

최종 코드(성공) - 축약

function solution(os) {
  const l = os.length
  const q = []

  os.forEach(o => {
    const [text, number] = o.split(" ")
    if (text == "I") {
      q.push(+number)
    } else {
      const value = ((+number > 0) ? Math.max : Math.min)(...q) // ()() 이렇게 붙일 수 있음
      const index = q.indexOf(value)
      q.splice(index, 1)
    }
  })

  return q.length ? [Math.max(...q), Math.min(...q)] : [0, 0]
}

초기 코드(성공)

// test code
const os = ["I -45", "I 653", "D 1", "I -642", "I 45", "I 97", "D 1", "D -1", "I 333"]
console.log(solution(os)); // [333, -45]

function solution(os) {
  const l = os.length
  const q = []

  os.forEach(o => { // os의 요소들을 돈다.
    // os의 요소 o를 공백 문자로 나누어 text와 number에 할당(구조분해할당)
    const [text, number] = o.split(" ")

    if (text == "I") {
      // text가 I인 경우, number를 q에 넣는데, `+기호`를 붙여 문자열이 아닌 숫자로 push
      q.push(+number) 
    } else if (text == "D" && number == "1") {
      // text가 D, number가 1인 경우
      // 최대값을 먼저 찾고
      const max = Math.max(...q)
      // 최대값의 index를 찾은 후
      const index = q.indexOf(max)
      // q에서 잘라내기
      q.splice(index, 1)
    } else if (text == "D" && number == "-1") {
      // max 값을 찾아 잘라낸 것과 마찬가지로 min 값도 찾아 잘라냄
      const min = Math.min(...q)
      const index = q.indexOf(min)
      q.splice(index, 1)
    }
  })

  if (!q.length) return [0, 0] // q가 비어있을 경우 [0, 0] 반환
  const max = Math.max(...q)
  const min = Math.min(...q)
  return [max, min] // 그렇지 않을 경우 최대값, 최소값 반환
}

👨🏻‍💻💭 Self Feedback

  • level이 왜 3인지 의문인 문제;

  • 2021.08.12 - 최초 작성

댓글 환영 질문 환영
by.protect-me

profile
protect me from what i want

0개의 댓글