Algorithm | 졸업 선물
9 / 18
📚 문제
졸업선물
선생님은 올해 졸업하는 반 학생들에게 졸업선물을 주려고 합니다. 학생들에게 인터넷 쇼핑몰에서 각자 원하는 상품을 골라 그 상품의 가격과 배송비를 제출하라고 했습니다. 선생님이 가지고 있는 예산은 한정되어 있습니다.
현재 예산으로 최대 몇 명의 학생에게 선물을 사줄 수 있는지 구하는 프로그램을 작성하세요. 선생님은 상품 하나를 50% 할인해서 살 수 있는 쿠폰을 가지고 있습니다. 배송비는 할인에 포함되지 않습니다.
첫번째 인자에 학생수와 예산이 주어진다. 두 번째 인자부터 n줄까지 각 학생들이 받고 싶은 상품의 가격과 배송비가 입력된다. 상품 가격은 짝수로 입력된다.
스스로 해결 여부
⭕️ 👏🏻
🔍 문제 접근
- 학생의 선물 가격과 배송비를 합한 총 가격을 계산한다.
- 계산 후 각 상품 가격과 배송비가 입력된 배열을 포함한 배열을 for문을 통해 돌면서 sum이라는 변수에 누적을 한다.
- 예산보다 sum이 작거나 같을때 num에 1씩 더한다.
👩🏻💻 코드
const getMaxStudentNumber = (budget, arr) => {
let sum = 0
let num = 0
let sumArr = []
for (let j = 0; j < arr.length; j++) {
sumArr.push(arr[j][0] / 2 + arr[j][1])
}
sumArr.sort((a, b) => a - b)
console.log(sumArr)
for (let i = 0; i < sumArr.length; i++) {
sum += sumArr[i]
if (sum <= budget) {
num++
}
}
return num
}
console.log(
getMaxStudentNumber(28, [
[6, 6],
[4, 3],
[10, 3],
[4, 5],
[2, 2],
])
) //4
🕵🏻♀️ 문제 풀이
- 처음에 문제 접근의 방법으로 푸니 만약 모든 상품 가격과 배송비를 더한 값의 배열의 순서가 달라지면 결과가 달라지는 것을 알았다. (왜냐하면 순서대로 각 배열을 접근하면서 sum의 누적할때마다 num이 1이 증가하는데 만약 합이 큰 숫자가 앞에서 먼저 나와버리면 num의 값이 달라질 수 있기 때문)
- 그래서 모든 상품 가격과 배송비를 더한 값의 배열을 새로 만든뒤 그 배열을 오름차순으로 정렬했다. 이렇게 되면 작은 수부터 큰 수 순서대로 나오기 때문에 최대한의 num의 값을 구할 수 있기 때문이다.
- 이 배열을 처음 문제 접근한 방법대로 for문에 누적을 시키고 만약 예산보다 값이 작거나 같을때 num을 1씩 증가시킨다.
Author And Source
이 문제에 관하여(Algorithm | 졸업 선물), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@_seeul/Algorithm-졸업-선물
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
졸업선물
선생님은 올해 졸업하는 반 학생들에게 졸업선물을 주려고 합니다. 학생들에게 인터넷 쇼핑몰에서 각자 원하는 상품을 골라 그 상품의 가격과 배송비를 제출하라고 했습니다. 선생님이 가지고 있는 예산은 한정되어 있습니다.
현재 예산으로 최대 몇 명의 학생에게 선물을 사줄 수 있는지 구하는 프로그램을 작성하세요. 선생님은 상품 하나를 50% 할인해서 살 수 있는 쿠폰을 가지고 있습니다. 배송비는 할인에 포함되지 않습니다.
첫번째 인자에 학생수와 예산이 주어진다. 두 번째 인자부터 n줄까지 각 학생들이 받고 싶은 상품의 가격과 배송비가 입력된다. 상품 가격은 짝수로 입력된다.
스스로 해결 여부
⭕️ 👏🏻
- 학생의 선물 가격과 배송비를 합한 총 가격을 계산한다.
- 계산 후 각 상품 가격과 배송비가 입력된 배열을 포함한 배열을 for문을 통해 돌면서 sum이라는 변수에 누적을 한다.
- 예산보다 sum이 작거나 같을때 num에 1씩 더한다.
👩🏻💻 코드
const getMaxStudentNumber = (budget, arr) => {
let sum = 0
let num = 0
let sumArr = []
for (let j = 0; j < arr.length; j++) {
sumArr.push(arr[j][0] / 2 + arr[j][1])
}
sumArr.sort((a, b) => a - b)
console.log(sumArr)
for (let i = 0; i < sumArr.length; i++) {
sum += sumArr[i]
if (sum <= budget) {
num++
}
}
return num
}
console.log(
getMaxStudentNumber(28, [
[6, 6],
[4, 3],
[10, 3],
[4, 5],
[2, 2],
])
) //4
🕵🏻♀️ 문제 풀이
- 처음에 문제 접근의 방법으로 푸니 만약 모든 상품 가격과 배송비를 더한 값의 배열의 순서가 달라지면 결과가 달라지는 것을 알았다. (왜냐하면 순서대로 각 배열을 접근하면서 sum의 누적할때마다 num이 1이 증가하는데 만약 합이 큰 숫자가 앞에서 먼저 나와버리면 num의 값이 달라질 수 있기 때문)
- 그래서 모든 상품 가격과 배송비를 더한 값의 배열을 새로 만든뒤 그 배열을 오름차순으로 정렬했다. 이렇게 되면 작은 수부터 큰 수 순서대로 나오기 때문에 최대한의 num의 값을 구할 수 있기 때문이다.
- 이 배열을 처음 문제 접근한 방법대로 for문에 누적을 시키고 만약 예산보다 값이 작거나 같을때 num을 1씩 증가시킨다.
Author And Source
이 문제에 관하여(Algorithm | 졸업 선물), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@_seeul/Algorithm-졸업-선물
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const getMaxStudentNumber = (budget, arr) => {
let sum = 0
let num = 0
let sumArr = []
for (let j = 0; j < arr.length; j++) {
sumArr.push(arr[j][0] / 2 + arr[j][1])
}
sumArr.sort((a, b) => a - b)
console.log(sumArr)
for (let i = 0; i < sumArr.length; i++) {
sum += sumArr[i]
if (sum <= budget) {
num++
}
}
return num
}
console.log(
getMaxStudentNumber(28, [
[6, 6],
[4, 3],
[10, 3],
[4, 5],
[2, 2],
])
) //4
- 처음에 문제 접근의 방법으로 푸니 만약 모든 상품 가격과 배송비를 더한 값의 배열의 순서가 달라지면 결과가 달라지는 것을 알았다. (왜냐하면 순서대로 각 배열을 접근하면서 sum의 누적할때마다 num이 1이 증가하는데 만약 합이 큰 숫자가 앞에서 먼저 나와버리면 num의 값이 달라질 수 있기 때문)
- 그래서 모든 상품 가격과 배송비를 더한 값의 배열을 새로 만든뒤 그 배열을 오름차순으로 정렬했다. 이렇게 되면 작은 수부터 큰 수 순서대로 나오기 때문에 최대한의 num의 값을 구할 수 있기 때문이다.
- 이 배열을 처음 문제 접근한 방법대로 for문에 누적을 시키고 만약 예산보다 값이 작거나 같을때 num을 1씩 증가시킨다.
Author And Source
이 문제에 관하여(Algorithm | 졸업 선물), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@_seeul/Algorithm-졸업-선물저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)