강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của hellooworld
hellooworld

câu hỏi đã được viết

Giới thiệu về giải quyết vấn đề thuật toán JavaScript (chuẩn bị cho bài kiểm tra mã hóa)

4. Quà tốt nghiệp

이렇게 설정하면 안되는 이유

Viết

·

271

0

answer을 선언하고나서 가만히 냅두고 굳이 cnt라는 변수를 줘서 마지막에 math해주는 이유를 잘 모르겠어서 그냥 처음부터 answer에 ++하도록 해줬습니다.
 
근데 저렇게 설정해서 코드 돌리니까 에러가 뜨네요
아래 코드처럼 하면 안되는 이유가 뭔가요?

<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>
이용해주세요.
코테 준비 같이 해요! javascript

Câu trả lời 2

0

codingcamp님의 프로필 이미지
codingcamp
Người chia sẻ kiến thức

안녕하세요^^

자바스크립트 변수 유효범위를 생각하셔야 합니다. 님처럼 for 블럭 안에서 선언한 변수는 해당 블럭 안에서만 유효합니다. 

let n = product.length;
let answer;

위에 위치 처럼 solution 함수의 지역변수로 선언하시면 에러는 없어집니다.

하지만 에러는 없어지지만 이 코드는 오름차순으로 정렬한 상품중 마지막 상품을 할인받을 때를 무조건 답으로 하는 코드입니다.

아래는 입력은 [12, 1] 상품을 할인받아 5가 답입니다. 하지만 님의 코드는 [8, 6]을 할인받아 4가 나올겁니다.

let arr=[[86], [22], [43], [45], [121]];
  console.log(solution(41, arr));

 

 

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문 안의 중괄호 영역 안에서만 유효합니다.

  }

}

도움이 되셨길 바랍니다


 

 

Hình ảnh hồ sơ của hellooworld
hellooworld

câu hỏi đã được viết

Đặt câu hỏi