자릿수 더하기

Sheryl Yun·2023년 7월 1일
0

문제 링크🔗

처음 풀이

맨 처음 풀이가 1점이 나와서 두 번째 방법으로 한 번 더 풀고 다른 답을 확인했다.

1번째 풀이

function solution(n) {
    let answer = 0;

    while (n !== 0) {
        answer += n % 10;
        n = Math.floor(n / 10);
    }
    
    return answer;
}

바로 어제 문제 풀이에서 '숫자로 하는 게 확실히 더 빠르다'는 프로그래머스 댓글에서 봐서 열심히 숫자로 풀었는데 테스트 케이스 하나가 굉장히 오래 걸리더니 결국 전체 케이스를 통과했어도 1점이 떴다.

원래 쓰던 문자열 방법으로 한번 가볼까 해서 문자열 + 배열을 활용해서 다시 풀어보았다.

2번째 풀이

function solution(n) {
    let answer = 0;
    
    n.toString().split('').forEach((num) => answer += parseInt(num))
    
    return answer;
}

확실히 테스트 케이스는 빠르게 통과했다. (숫자 풀이에서처럼 하나가 지체되는 현상 없었음)

근데 프로그래머스는 한번 정답 처리를 통과하고 나면 두 번째 풀이부터는 점수를 알려주지 않기 때문에 이전보다 더 효율적인지 판단할 수 있는 방법은 없었다. 그냥 테스트 케이스 전체를 숫자 풀이보다 좀 더 빨리 통과했다는 느낌 정도..

전반적으로 숫자 풀이는 테케 99%를 순식간에 통과하고 마지막 하나에서 상당한 시간이 걸렸던 반면, 문자열 풀이는 전반적으로 숫자 풀이보다 느릿하게 통과하면서 지체되는 테케가 없었다는 차이가 있었다.

새로운 풀이

function solution(n){
    let sum = 0;

    do {
        sum += n % 10;
        n = Math.floor(n / 10);
    } while(n > 0);

    return sum;
}

바로 이전 문제에서 do-while을 썼는데 까먹었고 ^^; (안에 %와 몫 구하는 내용만 기억남) parseInt 대신 * 1로 형변환 할 수 있는데 그것도 까먹었고 ^ㅅ^ (근데 + ' ' 나 * 1 같은 야매적인 느낌보다 메서드를 쓰는 게 더 내 취향인듯) 어쨌든 문제의 일부로 자릿수 구하기가 필요할 때 이제 망설임 없이 구할 수 있을 것 같다.

profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

0개의 댓글