Project/mini-project

목표 금액이 될 수 있는 경우의 수 찾기

fullfish 2022. 12. 25. 10:53

친구가 이런식으로 만들어 달라고 요청했다

 

중복조합으로 구했다

let input = `[231A01]   100
[231A02]   200
[231A03]   300
[231A04]   400
[231A05]   500
[231A06]   600
[231A07]   700`
let price = `800
5000
10000
11000`

function solution1(input, price) {
  let inputArr = trans(input)
  let priceArr = price.split('\n').map(ele => parseInt(ele.trim()))

  priceArr.forEach(price => {
    let result = []
    function repeat(sum, tempArr, index) {
      if (sum === price) return result.push(tempArr.slice())
      else if (sum > price) return
      for (let i = index; i < inputArr.length; i++) {
        repeat(sum + inputArr[i][1], tempArr.concat(inputArr[i][0]), i)
      }
    }
    repeat(0, [], 0)
    result = result.map(ele => ele.join('+'))
    console.log(`price가 ${price}일 때, 총 경우의 수 : ${result.length}`)
    result.forEach(ele => console.log(ele))
    console.log('------------------')
  })

  function trans(str) {
    return str
      .split('\n')
      .map(ele => ele.split(/ +/g))
      .map(ele => [ele[0], parseInt(ele[1])])
  }
}

'Project > mini-project' 카테고리의 다른 글

티스토리 글쓰기 버튼 만들기  (0) 2022.04.26
척추 세포 데이터의 정렬  (0) 2022.04.04