inflearn logo
강의

Course

Instructor

Introduction to Javascript Algorithm Problem Solving (Coding Test Preparation)

4. Graduation gift

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

278

hellooworld

2 asked

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

Answer 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

76

2

정렬 가능 여부 판단하기

0

63

2

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

0

81

1

코드 리뷰 부탁드립니다!

0

88

1

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

0

67

1

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

0

63

1

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

0

97

3

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

0

61

1

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

0

71

1

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

0

133

2

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

0

119

2

3칸씩 건너뛸 수 있을 경우

0

124

2

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

0

133

2

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

0

116

2

이렇게 해도 되나요?

0

102

2

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

0

144

2

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

0

136

1

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

0

112

1

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

0

98

1

코드리뷰 부탁드립니다.

0

129

1

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

0

130

1

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

0

139

0

코드 리뷰 부탁드립니다.

0

116

1

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

0

143

1