본문 바로가기

Coding Test/Programmers

[프로그래머스/JavaScript] 코딩 테스트 풀이 (문제 39 - 자릿수 더하기)

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