출처) https://school.programmers.co.kr/learn/courses/30/lessons/12931
function solution(n) {
let answer = n
.toString()
.split("")
.map((item) => Number(item))
.reduce((acc, cur) => acc + cur);
return answer;
}
메서드 체이닝을 유용하게 사용할 수 있다.
reduce 메서드로 배열내 숫자들의 합을 간단하게 구할 수 있다.
split 메서드의 인자에 ("")를 넣은것과 (" ") 를 넣은것은 결과가 다르게 나온다. 전자는 모든 글자를 하나하나 쪼개주고, 후자는 빈칸을 기준으로 쪼개준다. 빈칸을 생각없이 넣으면 안된다.
의문) string-> number 변환을 위해 나는 Number() 를 사용했는데 다른 사람들 풀이에서는 대부분 parseInt()를 사용했다.
let mynum = "12.34";
console.log(parseInt(mynum)); // 12
console.log(Number(mynum)); // 12.34
console.log(Math.floor(Number(mynum))); // 12
소수점을 버려야 하는 상황에서 parseInt를 사용하는 것은 잘못된 사용이 될 것이고 역으로 소수점을 버리고 정수만 필요한 상황에서 Number를 사용하면 Math.floor를 한번 더 거쳐야 하므로 비효율적일 것이다. 위 문제에서는 정수만 등장하기에 parseInt()를 사용하는 것과 Number()를 사용하는 것에 유의미한 차이는 없었다.
하지만 소수점이 언제 등장할지 모르므로 둘의 차이를 정확히 이해하고 적재적소에 사용하는 것이 중요하다.
출처)https://school.programmers.co.kr/learn/courses/30/lessons/120829
function solution(angle) {
if(0<angle<90) {return 1};
if(angle===90){return 2};
if(90<angle<180){return 3};
if(angle===180){return 4};
}
어이없는 실수. 논리 연산자를 저런식으로 사용할 수는 없다.
angle이 0초과, 90미만인 경우를 나타내고 싶으면
0<angle && angle<90
으로 표기해야 한다.
function solution(angle) {
if(0<angle && angle<90) {return 1};
if(angle===90){return 2};
if(90<angle && angle<180){return 3};
if(angle===180){return 4};
}
의도대로 정상 작동하는 코드.
출처) https://school.programmers.co.kr/learn/courses/30/lessons/120831
function solution(n) {
let sum=0;
for(let i=0; i<=n; i++){
if(i%2===0){sum+=i}
}
return sum;
}
function solution(n) {
var answer = 0;
for(let i=2 ; i<=n ; i+=2)
answer += i;
return answer;
}
i+=2
로 2씩 증가시키는 것은 생소하면서도 유용하다. 문제에서 짝수만 더하라고 했으므로 i를 2부터 시작해서 2씩 증가시키는것도 분명 유효한 접근일 것이다.