function solution(n) {
var answer = 0;
for (var i = 0; i<=n; i++){
if (i%2===0){
answer+=i;
}
}
return answer;
}
처음에 문제를 보고 반복문을 떠올렸으나, 반복문 다음으로 if, else를 넣은 뒤에 무엇을 넣어야 식이 풀어질지 한참을 생각해봐도 답이 나오질 않았다.
그렇게 구글링을 해봤고 %라는 연산자를 알게 되었다.
나머지 (%)
나머지 연산자(%)는 왼쪽 피연산자를 오른쪽 피연산자로 나눴을 때의 나머지를 구합니다. 부호는 항상 왼쪽 피연산자의 부호를 따릅니다.
라고 하는 것이었다. 이를 응용하면 문제를 아주 쉽게 풀 수 있었는데,
function solution(n) {
for (var i = 0; i<=n; i++){
var answer = 0;
if (i%2===0){
answer=answer+i;
}
else {
answer=answer;
}
}
return answer;
}
처음에 이런 식으로 식을 썼는데 오류가 떴었다. 무엇이 문제인가 하고 코드를 수정하고 실행해봐도 결과값이 같아 잠깐 고민하며 코드를 위에서부터 천천히 훑어봤고 var answer = 0;이 for 문 안에 있음으로써 for문이 실행 될 때마다 answer이 초기화가 되면서 일어나는 일이었다.
function solution(n) {
var answer = 0;
for (var i = 0; i<=n; i++){
if (i%2===0){
answer=answer+i;
}
else {
answer=answer;
}
}
return answer;
}
이렇게 코드를 완성하였고 코드에서 쓸모 없는 부분들을 제거한 것이 제일 상단에 있는 코드이다.
이 외에도
function solution(n) {
var answer = 0;
for(let i=2 ; i<=n ; i+=2)
answer += i;
return answer;
}
이것은 성능적으로 좋은 코드
function solution(n) {
return Math.floor(n / 2) * (2 + n) / 2 | 0
}
이것은 수학 법칙을 응용한 코드이다.
2 4 6 8 10.. 이렇게 더하는 것이기 때문에 (2 + 마지막 짝수) × ?? 이렇게 진행되는 것이라고 한다.
*참고자료
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Addition_assignment
더하기 할당 (+=) - JavaScript | MDN
더하기 할당 연산자(+=)는 오른쪽 피연산자의 값을 변수에 더한 결과를 다시 변수에 할당합니다. 두 피연산자의 타입이 더하기 할당 연산자의 동작을 결정하며, 덧셈 또는 문자열 연결이 가능합
developer.mozilla.org
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Remainder
나머지 (%) - JavaScript | MDN
나머지 연산자(%)는 왼쪽 피연산자를 오른쪽 피연산자로 나눴을 때의 나머지를 구합니다. 부호는 항상 왼쪽 피연산자의 부호를 따릅니다.
developer.mozilla.org