저장을 습관화
프로그래머스 LV.1 자릿수 더하기 본문
프로그래머스 LV.1 자릿수 더하기
https://school.programmers.co.kr/learn/courses/30/lessons/12931
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
자릿수 더하기
2. 문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
3. 제한 사항
N의 범위 : 100,000,000 이하의 자연수
4. 예시
N | answer |
123 | 6 |
987 | 24 |
5. 기본 제공 코드
function solution(n)
{
var answer = 0;
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
console.log('Hello Javascript')
return answer;
}
6. 제출한 내 답
const solution = (n) => {
let answer = 0;
a = n.toString();
for (i = 0; i < a.length; i++) {
b = Number(a[i]);
answer += b;
}
return answer;
};
6-2. VSC에 작성한 내용
const solution = (n) => {
let answer = 0;
a = n.toString();
for (i = 0; i < a.length; i++) {
b = Number(a[i]);
answer += b;
}
return answer;
};
// 테스트
console.log(solution(123));
console.log(solution(987));
7. 특이사항
어떻게 접근해야할지 몰라서...
let a = 987654;
b = a.toString();
console.log(b);
console.log(b.length);
console.log(b[1]);
대충 이런거 끄적거리고 있었는데...
어 뭔가 되는것 같더라고..
그래서 다시 이렇게 하고...
let a = 987654;
b = a.toString();
console.log(b); // 987654 // string
console.log(b.length); // 6 // number
c = b[1]; // 8 // string
d = Number(c);
console.log(d); // 8 //number
이거에 반복문을 사용한게 내 답
8. 다른 사람이 작성한 답
8-1. 반복문을 사용해 10으로 나눠가면서, 소숫점은 버린다음, 더함
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int n) {
int answer = 0;
while(n){
answer += n%10;
n /=10;
}
return answer;
}
아 이거 C네?
뭐 아무튼
8-2. 자바스크립트 버전 10으로 나눠가면서 소숫점 버리고 더하기
function solution(n){
// 문자 풀이
// return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
// 숫자풀이
var sum = 0;
do {
sum += n%10;
n = Math.floor(n/10);
} while(n > 0);
return sum;
}
8-3. 매개변수+""
function solution(n)
{
var a = (n + '').split('');
var b = 0;
for(var i = 0; i < a.length; ++i) {
b += parseInt(a[i]);
}
return b;
//return n.toString().split('').reduce((a, b) => (a * 1) + (b * 1));
}
var a = (n + "') 부분이 잘 이해가 안갔었다.
저게 무슨 의미지? split("")은 빈 문자로 쪼갠다는건 알겠는데
저러면 a는 그냥 n이 나오는거 아닌가?
매개변수가 123이면 그냥 그대로 문자열 123 나오는거 아니야? 라고 생각했었다.
챗지피티한테 물어보니까
n+""는 number + string
즉 정수 매개변수 n을 문자열로 바꾸는 방법이라고,
n.toString()과 같은 의미이고 같은 결과라고 하더라
1차 무릎 탁
다만 n+""와 n.toString()의 차이는
전자는 자바스크립트의 기본 규칙 "숫자와 문자열을 더하면 그 결과는 문자열이 된다"을 사용한 것이고
후자는 메서드를 호출했단 것
따라서 따지고보면 전자가 더 간단하단 것
2차 무릎 탁
그리고 그 결과를, 예를들어 매개변수 n이 123이라고 한다면 split() 메소드를 사용해서
123.split("") 공백을 기준으로 쪼개기 때문에
이 결과는 배열 [ '1', '2', '3' ] 이 된다는 것
감탄
그러면 또, Number()와 parseInt() 부분
둘 모두 문자열을 숫자로 변환하는 함수임은 같지만
차이점으로는
1) NaN 처리
parseInt
문자열(abc)과 섞여있다면 숫자 부분만 변환하고 나머지 문자는 무시한다.
만약 숫자로 시작하지 않는다면 NaN을 반환한다.
Number
문자열(abc)과 섞여있다면 NaN이 나온다.
let a = parseInt("123abc"); // (문자열의 숫자 부분만 변환)
console.log(a); // 123
let b = parseInt("1a2b3c");
console.log(b); // 1
let c = parseInt("abc123");
console.log(c); // NaN
let d = Number("123abc"); // (문자열 전체 변환, 변환 불가능한 문자 포함)
console.log(d); // NaN
2) 정수와 부동소수점 변환
parseInt
소수점 이하는 무시한다.
Number
정수와 소숫점까지 숫자 타입으로 변환한다.
let a = "123.123";
let b = parseInt(a); // (정수 변환)
console.log(b); // 123
let c = Number(a); // (부동소수점 변환)
console.log(c); // 123.123
3) 진수 변환 지원
parseInt는 진수 변환을 지원해주나
Number는 그런거 없다.
// 2진수 -> 10진수
console.log(parseInt("1000", 2)); // 8
console.log(parseInt("1001", 2)); // 9
console.log(parseInt("1010", 2)); // 10
// 16진수 -> 10진수
console.log(parseInt("2a", 16)); // 출력: 42
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.0 짝수의 합 (0) | 2023.08.11 |
---|---|
프로그래머스 LV.0 각도기 (0) | 2023.08.11 |
프로그래머스 LV.1 약수의 합 (0) | 2023.08.07 |
프로그래머스 LV.1 x만큼 간격이 있는 n개의 숫자 (0) | 2023.07.28 |
프로그래머스 LV.1 평균 구하기 (0) | 2023.07.28 |