티스토리 뷰
문제 설명
자연수 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+"")를 사용해서 메서드 없이도 숫자를 문자열로 바꿀 수 있다.
'스파르타 > 알고리즘 코드카타' 카테고리의 다른 글
코딩 테스트 - 나머지가 1이 되는 수 찾기 (0) | 2024.08.12 |
---|---|
코딩 테스트 - 약수의 합 (0) | 2024.08.11 |
코딩 테스트 - 평균 구하기 (0) | 2024.08.08 |
코딩 테스트 - 가운데 글자 가져오기 (0) | 2024.08.02 |
코딩 테스트 - 수박수박수박수박수박수? (0) | 2024.08.01 |