작성
·
193
0
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(m, product) {
let n = product.length;
product.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));
for (let i = 0; i < n; i++) {
let money = m - (product[i][0] / 2 + product[i][1]);
let answer = 1;
for (let j = 0; j < n; j++) {
if (j !== i && product[j][0] + product[j][1] > money) break;
if (j !== i && product[j][0] + product[j][1] <= money) {
money -= product[j][0] + product[j][1];
answer++;
}
}
}
return answer;
}
let arr = [
[6, 6],
[2, 2],
[4, 3],
[4, 5],
[10, 3],
];
console.log(solution(28, arr));
</script>
</body>
</html>
이용해주세요.답변 2
0
안녕하세요^^
자바스크립트 변수 유효범위를 생각하셔야 합니다. 님처럼 for 블럭 안에서 선언한 변수는 해당 블럭 안에서만 유효합니다.
let n = product.length;
let answer;
위에 위치 처럼 solution 함수의 지역변수로 선언하시면 에러는 없어집니다.
하지만 에러는 없어지지만 이 코드는 오름차순으로 정렬한 상품중 마지막 상품을 할인받을 때를 무조건 답으로 하는 코드입니다.
아래는 입력은 [12, 1] 상품을 할인받아 5가 답입니다. 하지만 님의 코드는 [8, 6]을 할인받아 4가 나올겁니다.
0
부족하지만 조금이라도 도움이되셨길 바라며 아는대로 답변드리겠습니다.
우선 let, const 키워드가 block scope인것은 아실겁니다.
function solution(m,product){
// 여기서 let이나 const 키워드로 변수선언 및 할당했을 경우는 이 solution 함수 안의 중괄호 영역 안에서만 유효합니다.
}
그러나 만약
function solution(m, product) {
for(let i = 0; i < n; i++ {
// 여기의 for문 안에서 let이나 const 키워드로 변수선언 및 할당했을 경우는 여기의 for문 안의 중괄호 영역 안에서만 유효합니다.
}
}
도움이 되셨길 바랍니다