첫째줄에는 입력받은 수의 자릿수, 둘째줄에는 입력받은 수가 온다.
둘째줄에 입력받은 수의 각 자리를 더한 값을 출력하라는 문제이다.
for문으로도 풀 수 있지만 reduce 연습을 위해 reduce로만 정리!!
어제 밤에 풀었을 때는 reduce를 쓰는 거에만 급급해서 result 하나에 결과를 몰아넣고 출력하는 방식으로 도전했다.
<script>
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
//trim()을 통해 공백 없애기, split('\n')을 통해 여러 값을 줄바꿈해서 입력받는다
const num = input[1].split('');
//input[1]은 두번째 줄에 입력받은 값, 각 자리를 split('')를 통해 분리한 것을 담아 배열로 반환 -> split('')을 사용했기 때문에 input[1]은 string이다.
//ex) input[1] = '12345'일 경우, num = ['1','2','3','4','5'];가 된다
const result = num.reduce((accumulator, currentNum) => accumulator += Number(currentNum), 0);
//reduce의 accumulator의 초기값은 0으로 설정
//num 내의 데이터는 현재 split('')으로 인해 문자열이 됐기 때문에 Number(currentNum)으로 누적되도록 한다.
//accumulator에 누적값을 저장시켜 num 내의 데이터 currentNum을 모두 더한 값을 구한다.
console.log(result);//result 출력
</script>
오늘 블로그에 다시 풀이를 정리하면서 오늘 배운 IIFE를 사용해서도 이 문제를 풀 수 있지 않을까 싶어서 여러번 도전하다가 마침내 성공했다!!
<script>
(function() {
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
//공백 제거를 위해 trim() 사용
//여러 개의 입력값을 두 줄에 걸쳐 받기 때문에 split('\n')을 해준다
const num = input[1].split('');
//input의 두번째 값의 숫자 하나하나를 분리해서 배열에 담음
const result = num.reduce((accumulator, currentNum) => {
return accmulator += Number(currentNum)
}, 0);
return console.log(result);
})();
</script>
IIFE로 풀면 두번째 입력값을 보호할 수 있어서 좀 더 좋지 않을까?하는 개인적인 생각...ㅎㅎㅎ
메모리랑 실행 시간은 일단 차이가 없었다.
다른 문제에서도 IIFE를 또 활용해 봐야겠다.