오늘의 코딩테스트 한줄 - 자릿수 더하기

Edwin·2023년 2월 4일
0
post-thumbnail

자릿수 더하기

프로그래머스, 자릿수 더하기

문제설명 : 정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요

  • 풀이(1) : 1 + 2 + 3 + 4 = 10을 return합니다.
  • 풀이(2) : 9 + 3 + 0 + 2 + 1 + 1 = 16을 return합니다.

1) 나의 풀이 살펴보기

function solution(n) {
  let arrn = String(n);
  let arr = [];
  
  for(let i=0;i<arrn.length;i++) {
    arr.push(Number(arrn[i]))
  }
  let answer = arr.reduce((prev, cur) => {
    return prev+cur;
  }, 0);
  
  console.log(answer);
  return answer;
};

solution(123);
  1. 숫자열(Number)을 문자열(String)로(변수 arrn) 변화시켜주었다. 이를 통해서 각각의 요소들을 배열 변수arr에 담았다.
  2. 위의 작업을 수행하기 위해서 변수 arrn를 for(반복)문을 통해서 각 요소들이 변수arr에 추가되게 하였다.
  3. 변수arr 배열에 숫자열(Number)이 담겼다면, 쉽다. reduce를 통해서 각 요소들을 하나씩 더해주면 된다. 결과는 통과이다.

reduce() 메소드 다시 정리하기

모질라, reduce
reduce()는 배열에 대한 prototype 가운데 하나이다. 그런데 prototype이 무엇일까? 원형이라는 뜻으로, 상속받은 데이터를 말한다고 한다. 즉 reduce()는 배열에서 상속받은 데이터들을 다루는 메소드라는 이야기이다.

모질라의 설명에 따르면, reduce() 메소드는 배열의 각 요소들을 하나의 결과값으로 반환하는 기능을 수행한다. 즉, 자동더하기 계산기(누적계산의 결과 값) 정도로 코린이 수순에서는 이해하자.

구문을 살펴보면 아래와 같다.

arr.reduce((누계, 변수를매개변수로받음) => {return 누계+배열의각요소;}, 초기값);
1. 누계변수를매개변수로받음의 매개변수가 각각 선언된다.
2. => 1번의 내용을 이제 함수에서 처리할 것인데 return으로 누계변수를매개변수로받은 - 배열의 각요소를 반복적으로 더해주며 실행한다.
3. 이때, 누계의 처음 값은 초기값으로 설정한 값이다. 위의 코드에서 필자는 0으로 초기값을 설정해주었다.
4. 배열 = [1, 2, 3, 4]
5. 초기값 누계가 0일 때, 배열의 첫번째 '1'이 올라오고 해당 값이 return되면서 더해진다. 다음은 과정에서는 누계가 1이 될 것이고, 배열의 첫번째 '2'가 올라와서 return되면서 더해질 것이다. 이러한 과정을 배열의 길이만큼 수행하며, 결과로 "10"이 출력되는 배열메소드가 reduce()이다.

02 다른 풀이 살펴보기

function solution(n) {
    return n.toString().split("").reduce((r, c) => r + Number(c), 0);}

같은 reduce()메소드를 사용했는데, 역시 한 줄 만에 끝내버린 사람들이 존재했다. 위의 코드는 내가 숫자열 자료형을 문자열로 변환해서 반복문으로 자른 것을 두메소드로 끝내버렸다.

  • toString() : 배열의 자료형을 변환시켜주는 메소드인데, 위의 코드에서는 숫자열을 문자열배열로 변환시켰다.
  • split("") : 변환된 자료형을 하나씩 잘라냈다.
  • reduce() : 하나씩 잘려진 배열의 요소를 숫자형자료(Number())로 형변환하여 계산하였다.

03 정리하면...

아는 것이 전부는 아니다. 활용까지 할 줄 알아야 아는 것이지 않을까? 다른 사람의 풀이는 기존에 알고 있는 부분이었지만, 1/3만 활용했다. 이게 현재 실력인가보다.

profile
신학전공자의 개발자 도전기!!

0개의 댓글