inflearn logo
강의

Khóa học

Chia sẻ kiến thức

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

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

279

hellooworld

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

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

안녕하세요^^

자바스크립트 변수 유효범위를 생각하셔야 합니다. 님처럼 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

tkzw48691767

부족하지만 조금이라도 도움이되셨길 바라며 아는대로 답변드리겠습니다.

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

  }

}

도움이 되셨길 바랍니다


 

 

continue를 사용하는 이유

0

79

2

정렬 가능 여부 판단하기

0

64

2

알고리즘 학습법 관련해서 질문드립니다.

0

85

1

코드 리뷰 부탁드립니다!

0

90

1

indexOf를 사용해서 풀어보았습니다 !!

0

68

1

저는 이런식으로 구현 해보았습니다 !!

0

64

1

12,13,14 강의 소리만 나오고 검은 화면입니다

0

99

3

반복문 최소화하고 indexOf 사용해서 풀어봤습니다

0

63

1

영상 보기 전에 직접 풀어봤습니다.

0

74

1

섹션1의 17번문제 이 풀이로 풀어도 될까요?

0

133

2

정규표현식으로 처리해도 상관없나요 ?

0

120

2

3칸씩 건너뛸 수 있을 경우

0

125

2

강의에 대해 질문있습니다.

0

135

2

Object와 Set을 이용해 풀어봤습니다.

0

117

2

이렇게 해도 되나요?

0

102

2

선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.

0

145

2

이렇게 풀어도 괜찮을까요?

0

138

1

이렇게 풀어도 괜찮을까요?

0

112

1

모든 아나그램 찾기에서 시간복잡도

0

98

1

코드리뷰 부탁드립니다.

0

130

1

for loop 탈출은 return 문으로 해도 되지 않나요?

0

133

1

투포인트알고리즘으로 풀어봤습니다.

0

142

0

코드 리뷰 부탁드립니다.

0

120

1

코드 맞게 작성한 거 아닌가여??

0

146

1