티스토리 뷰

문제 설명

 

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.

예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

 

제한사항

N의 범위 : 100,000,000 이하의 자연수

 

풀이 과정

더보기

머릿속에서 떠오른 논리 전개는 이거였다.

//자연수 n을 각 자릿수로 나누기
//자연수 n을 문자열로 바꿔서 문자열을 하나씩 나누는 방법은 없을까?

//n의 모든 인덱스 더하기

 

모든 인덱스 더하기는 for문으로 처리할 수 있을 것 같지만, 자연수 n을 문자열로 바꿔서 문자열을 하나씩 나누는 방법을 잘 모르겠었다. 해당 메서드가 있을 것 같아 구글링을 했다. 

 

Array.from() 을 사용한 방법이 있었다. 유사배열객체(array-like object), 반복가능객체(iterable object)를 얕은 복사(shallow copy)하여 새로운 배열 객체를 만드는 방법이다. 

const num = 1234;
// 정수 -> 문자열로 변경
const str = String(num);
// element를 문자열에서 정수로 변경
const mapfn = (arg) => Number(arg)
// 문자열 -> 배열로 변경
const newArr = Array.from(str, mapfn)
console.log(newArr);  // [ 1, 2, 3, 4 ]

이걸 적용시켜서 정수를 문자열 배열로 변경했다. for문의 answer+=newArr[i]부분을 나름 외웠는데 헷갈려서 다시 찾아서 봤다. 다행히 완성된 코드는 잘 작동했다.

 

정답 코드

function solution(n){ 
    const changeString = String(n);
    const changeNum = (changeString) => Number(changeString);
    const newArr = Array.from(changeString, changeNum);
    var answer = 0;
    for(let i = 0; i<newArr.length; i++){
        answer+=newArr[i]
    }
    return answer;
}

 

내 코드 풀이, 다른 사람의 코드

더보기

그런데 내 코드에서 이해가 안 가는 부분이 있었다. String을 이용해서 문자열로 바꿨는데, 왜 다시 굳이 정수로 바꿨다가 다시 문자로 바꾸지? 간단한 문제 같아 챗지피티에게 물어봤더니 다음과 같은 해답을 주었다.

Array from을 사용하지 않고 String만으로 이 작업을 수행할 수 있다. 

 

다른 사람의 코드

function solution(n){
    // 쉬운방법
    return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}

정말 짧은 코드다! 해석을 다 하지는 못해서 눈에 띄는 정보를 얻어가기로 했다.

 (n+"")를 사용해서 메서드 없이도 숫자를 문자열로 바꿀 수 있다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함