일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- nginx
- JavaScript
- npm
- ubuntu
- elb
- java
- 조건문
- 타입스크립트
- MYSQL
- 생활코딩
- 항해99
- TypeScript
- 자바스크립트
- nomadcoder
- JWT
- wil
- Joi
- mongodb
- reduce
- 노마드코더
- Node.js
- 메소드
- 프로그래머스
- CORS
- it
- mongoose
- Load Balancer
- Nodejs
- AWS
- https
- Today
- Total
V-logue
[항해99] 프로그래머스 - 자릿수 더하기 본문
일단 이 문제를 푸는데, 바로 생각난 것이 숫자를 배열로 만들어서 배열의 합을 구하면 될 것 같다는 생각을 했다.
그런데 reduce의 용법을 제대로 이해하지 못해, 정답을 확인하고 나서 알게 된 것이
function solution(n){
return n.toString().split('').reduce((function(acc, cur) {return +acc + +cur}),0);
}
보면 알겠지만, 따로 변수를 주지않고 return값에 모든 코드를 집어 넣은 모습을 볼 수 있다.
일단 callback 함수에 대한 이해가 필요할 것 같아 찾아보았다.
개인적인 사견으로 Callback 함수란,
파라미터로 함수를 전달하는 함수, 익명으로도 전달 가능하다.
콜백(callback) 함수란 파라미터(매개변수)로서 함수를 전달받아, 함수 내부에서 실행되는 함수이다.
callback 함수는 사용 원칙이 있는데,
- 익명의 함수로 사용될 것 ,
- 자바스크립트는 null값과 undefined 타입을 제외하고 모든 것을 객체로 다루는데, 함수를 콜백으로 다뤄줄 경우, 함수의 이름만 넘겨주면 된다.
function() // finishFunc()
이렇게 콜백 함수에 ( )를 붙일 필요가 없다는 말이다.
- 전역변수, 지역변수를 콜백함수의 파라미터로 전달 가능하다.
더 깊은 설명은... 생략하겠다. 아무튼, return값에서 실행된 reduce함수 내부에서 callback함수가 파라미터로서
reduce함수를 전달받아 실행됐다고 설명할 수 있다.
return문은 함수 내부에서 실행되며, 함수를 호출한 곳에 데이터를 반환하는 즉시 함수를 강제종료하기 때문에,
=> 대신 fucntion 콜백함수를 주어 reduce함수를 전달받아 다시 실행시켰다고 생각했다.
사실은 제대로 이해하지 못한 것 같다.
function solution(n){
return (n+"").split("").reduce((acc, curr) => acc + curr, 0)
}
나는 이런 방식으로 풀고 있었는데, 정확히 내가 생각한 코드는 이거였다.
내가 놓친게 있으니 바로
parseInt() 였다.
숫자를 문자열로 만든 후 배열로 만들었기 때문에, parseInt가 없다면 문자열의 합이기 때문에
console.log(123)이라면 1 + 2 + 3 = 6이 아닌, 123이 출력되버리는 것이었다. 바로 이 점을 이해하지 못했기 때문에
계속해서 답이 나오지 않았다.
정답을 보자마자 머리를 탁 쳐버리고 말았다.
'항해 99 > 프로그래머스 Algo' 카테고리의 다른 글
[항해99] 프로그래머스 - 자연수 뒤집어 배열로 만들기 (0) | 2022.05.17 |
---|---|
[항해99] 프로그래머스 - 정수 제곱근 판결 (0) | 2022.05.17 |
[항해99] 프로그래머스 - 내적 (0) | 2022.05.16 |
[항해99] 프로그래머스 - 나누어 떨어지는 숫자 배열 (0) | 2022.05.16 |
[항해99] 프로그래머스 - 수박수박수박수박수박수? (0) | 2022.05.16 |