백준 3985 롤케이크

걍걍규·2023년 7월 24일
0
post-thumbnail

문제 접근

const fs = require('fs')
const input = fs.readFileSync('example.txt').toString().trim().split('\n')

const L = +input.shift()
const N = +input.shift()
const paper = input.map(el => el.split(' ').map(Number))

//예상으로 가장 많은 케익을 받는 사람을 찾는 함수
const anticipation = (input) => {
  const tmp = []
  for(let i=0; i<input.length; i++){
    const [P ,K] = input[i]
    tmp.push(K - P)
  }
  for(let i=0; i<tmp.length; i++){
    if(tmp[i] == Math.max(...tmp)){
      return i + 1
    }
  }
}

//실제로 가장 많은 케익을 받는 사람을 찾는 함수
const actuality = (input) => {
  const count = Array.from({length : N+1},()=>0)
  const rollCake = Array.from({length : L+1},()=>0)
  input.unshift([])

  /*
  rollCake 배열에 각 번호를 매겨주는 반복문
  [0, 0, 1, 1, 1, 0, 3, 2, 2, 3, 0]
  */
  for(let i=1; i<input.length; i++){
    const [S, E] = input[i]
    for(let j = S; j<=E; j++){
      if(rollCake[j] == 0){
        rollCake[j] = i
      }
    }
  }
  
  /*
  각 번호가 몇번 나왔는지 반복문 내에 분기를 이용해서 카운트 해준다
  */
  for(const number of rollCake){
    //0이면 PASS
    if(number===0){
      continue;
    }

    if(count[number] === 0){
      count[number] = 1
    }else{
      count[number] = count[number] + 1
    }
  }
  // [ 0, 3, 2, 2 ] 인덱스가 곧 번호를 의미하고 값은 몇개의 케익을 받는가를 의미한다.
  for(let i=0; i<count.length; i++){
    if(count[i] === Math.max(...count)){
      return i
    }
  }
}



console.log(`${anticipation(paper)}\n${actuality(paper)}`)
profile
안녕하시오?

0개의 댓글