728x90
# 문제
정수 n이 매개변수로 주어질 때 n의 각 자리 숫자의 합을 return하도록 solution 함수를 완성해주세요
# 답안
// 1.입력: n -> 정수 2253 같은거
// 2.출력: n의 각자리 숫자의 합 2+2+5+3 = 12
// 방법 1) 숫자→문자열 형변환 후 for 반복문 돌리기 (반복문 내에서 다시 숫자로 변환해서 더함)
function solution(n) {
let answer = 0;
let str = String(n); // 문자로 변환
for (let i =0; i <str.length; i++) {
answer += Number(str[i]); // 숫자로 변환해서 하나씩 더하기
}
return answer;
}
// 방법 2)
function solution(n) {
let result = 0;
while (n > 0) {
result += n % 10; // 일의 자리 숫자를 더함
n = Math.floor(n/10); // 한 자리씩 줄임
}
return result;
}
< 방법 1 설명 >
- JavaScript에서 문자열을 인덱싱하여 접근하면 해당 문자열의 각 문자를 포함하는 배열과 유사한 동작을 한다.
- 즉, 문자열의 각 문자는 개별적인 요소로 간주되어 반복문을 통해 접근할 수 있다.
- 따라서 문자열을 for문으로 순회하면 해당 문자열의 각 문자에 접근하면서 반복 작업을 수행할 수 있다.
- 주어진 코드에서 for문을 사용하여 문자열 str을 순회하면서 각 문자를 answer에 누적하고 있다.
- 이 때 str[i]는 문자열 str의 i번째 문자에 접근하는 것을 의미한다.
- 이러한 작업은 문자열을 배열처럼 다루는 것처럼 보이지만, 실제로는 문자열에 대해 수행되는 것이다.
- 문자열이 유사 배열(배열과 비슷한 객체)로 동작하므로 이러한 동작이 가능하다.
< 방법 2 설명 >
- solution 함수는 매개변수 n을 받아들이고, 초기값이 0인 sum 변수를 선언함
- sum 변수는 각 자리 숫자의 합을 저장함
- while 반복문은 n이 0보다 큰 동안에 실행됨. 이는 n이 양수인 경우에만 계속해서 반복문이 실행됨을 의미함
- sum 변수에는 n을 10으로 나눈 나머지를 더함
- n % 10은 n의 일의 자리 숫자를 의미함. 이것을 sum에 더해줌으로써 일의 자리 숫자를 더하고 있음
- n에는 n을 10으로 나눈 몫을 할당함. Math.floor 함수를 사용하여 소수점 이하를 버리고 정수부만을 얻음. 이렇게 하면 n에서 일의 자리 숫자가 제거됨
- while 반복문이 종료되면, n의 각 자리 숫자를 모두 더한 값이 sum에 저장되어 있음
- 마지막으로 sum 값을 반환함
- 예를 들어 solution(123)을 호출하면, 함수는 1 + 2 + 3의 결과인 6을 반환함
728x90
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 41 - n의 배수 고르기 ) (2) | 2024.02.09 |
---|---|
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 40 - 숨어있는 숫자의 덧셈(1)) (0) | 2024.02.09 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 38 - 모음 제거) (0) | 2024.02.07 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 37 - 제곱수 판별하기) (0) | 2024.02.07 |
[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 36 - 삼각형의 완성조건 (1)) (2) | 2024.02.07 |