맨 처음 풀이가 1점이 나와서 두 번째 방법으로 한 번 더 풀고 다른 답을 확인했다.
function solution(n) {
let answer = 0;
while (n !== 0) {
answer += n % 10;
n = Math.floor(n / 10);
}
return answer;
}
바로 어제 문제 풀이에서 '숫자로 하는 게 확실히 더 빠르다'는 프로그래머스 댓글에서 봐서 열심히 숫자로 풀었는데 테스트 케이스 하나가 굉장히 오래 걸리더니 결국 전체 케이스를 통과했어도 1점이 떴다.
원래 쓰던 문자열 방법으로 한번 가볼까 해서 문자열 + 배열을 활용해서 다시 풀어보았다.
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 같은 야매적인 느낌보다 메서드를 쓰는 게 더 내 취향인듯) 어쨌든 문제의 일부로 자릿수 구하기가 필요할 때 이제 망설임 없이 구할 수 있을 것 같다.