코딩테스트

프로그래머스 연습문제 : 내적

유기린 2022. 8. 7. 14:09

https://school.programmers.co.kr/learn/courses/30/lessons/70128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 설명

길이가 같은 두 1차원 정수 배열 a, b가 매개변수로 주어집니다. a와 b의 내적을 return 하도록 solution 함수를 완성해주세요.

이때, a와 b의 내적은 a[0]*b[0] + a[1]*b[1] + ... + a[n-1]*b[n-1] 입니다. (n은 a, b의 길이)

 

 

 

같은 위치의 배열끼리 곱하고 나온 수를 다 더해야 한다.

for 문으로 배열 위치를 돌리고 나온 결과들을 더해야겠다고 판단

 

임의로 해봤는데 결과가 안나온다 맞는거같은데???

하나씩 돌려보자

var a = [1, 2, 3, 4]
var b = [-3, -1, 0, 2]
var sum = 0
sum = sum + (a[0] * b[0])
console.log(sum);

-3이 잘나온다.

 

var a = [1, 2, 3, 4]
var b = [-3, -1, 0, 2]

var sum = 0;
for (var i = 0; i < a.length; i++) {
  sum = sum + (a[i] * b[i])
}
console.log(sum);

for문까지 잘돌아서 원하는 결과인 3이 나온다.

function이 잘못되었나???

 

 

var a = [1, 2, 3, 4]
var b = [-3, -1, 0, 2]

function solution(a, b) {
  var sum = 0;
  for (var i = 0; i < a.length; i++) {
    sum = sum + (a[i] * b[i])
  }
  console.log(sum);
}

이거는 안된다?? 근데 프로그래머스에는 출력이 나오긴하는데 콘솔에는 undefined

 

 'undefined'라는 키워드는 해당 변수의 자료형이 정해지지 않았음을 나타냅니다.

 

function solution(a, b) {
  var sum = 0;
  for (var i = 0; i < a.length; i++) {
    sum = sum + (a[i] * b[i])
  }
  return(sum);
}

 

찾다가 console.log를 return으로 바꾸니까 된다.

처음부터 맞았는데 헤맸다.

 

sum = sum + (a[i] * b[i])

sum += a[i] * b[i]

4번째줄을 += 을 사용하여 더 간단하게 줄일수있다 

 

 

 

 

 

 

 

 

 

** 왜 console로 찍을때는 undefined가 나올까??

 

 

 

 >https://velog.io/@cheal3/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%81%AC%EB%A1%AC-%EC%BD%98%EC%86%94%EC%B0%BD%EC%97%90-undefined%EA%B0%80-%EB%82%98%EC%98%A4%EB%8A%94-%EC%9D%B4%EC%9C%A0

 

[자바스크립트] 크롬 콘솔창에 undefined가 나오는 이유

위 사진처럼 크롬 콘솔창에서 명령어들을 입력 하다보면 undefined가 계속해서 출력되는 현상을 본 경험이 있을 것이다.위 현상을 이해하기 위해서는 자바스크립트에서 표현식과 문에 대하여 이

velog.io

- 콘솔창에서는 표현식의 평가된 값을 반환하기 때문에 표현식이 아닌 문을 실행하였을 때 undefined를 반환한 것이다.

 

 

>https://www.codeit.kr/community/threads/3907 코드잇 답변 가져옴

 
- 함수 안에 console.log 부분 때문 같아요. 함수이니 return으로 받는게 맞아보입니다^^
- 함수에서 결과값을 출력하는게 아니라 테스트 코드에서 결과값을 출력해야 합니다. 그런데 함수에서 결과값을 출력함으로써 return을 하지 않았습니다. 따라서 return값이 없는 함수를 출력하게 되서 undefined가 출력된 겁니다..
 
 
--> 함수나 var, for같은 문을 쓸때는  return을 쓰자!

 

 

콘솔 출력 해결 코드~~~

var a = [1, 2, 3, 4]
var b = [-3, -1, 0, 2]

function solution(a, b) {
  var sum = 0;
  for (var i = 0; i < a.length; i++) {
    sum = sum + (a[i] * b[i])
  }
  return (sum);
}
console.log(solution(a, b));

function에 return으로 값을 지정해서 끝내고

console로 function을 출력해준다!