프로그래머스 코딩테스트 연습
[프로그래머스 코테 C#] Lv1. 자릿수 더하기
노재두내
2024. 3. 14. 14:06
문제
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
보자마자 100,10 이런거 나누는게 생각났다.
근데 N의 범위가 억까지 가능해서
어떻게 해야하나 고민 해봐야할거같음
몫을 더하는거
아 계속 10으로만 나누면 될거같은디 = 아 아니다 그러면 123을 10으로 나누면 몫이 12가 나옴
무조건 큰 값부터 나누고 그 나머지를 나눠야 몫이 제대로 나옴
일단은 큰 단위의 값은 생각하지 말고 주어진 입력값만 통과되도록 만들어보자
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
int mok;
int i=100;
int remain=n;
while(i>0)
{
mok=remain/i;
remain=remain%i;
answer+=mok;
i=i/10;
}
return answer;
}
}
예상한대로 100의 단위까지는 통과
i 만 100000000으로 변경하니
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
int mok;
int i=100000000;//여기만 변경
int remain=n;
while(i>0)
{
mok=remain/i;
remain=remain%i;
answer+=mok;
i=i/10;
}
return answer;
}
}
정답
하지만 저렇게 i에다가 값을 할당하는게 맞는 방법이 아닌거같은 하드코딩 느낌 다른 사람의 풀이를 보자
[다른사람 풀이]
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
while(n>0){
answer+=n%10;
n=n/10;
}
return answer;
}
}
와웅 나머지 연산을 먼저하고
123이라고 치면
나머지는 3이고
n은 12가 되고
다시 나머지는 2
n은 1
다시 나머지는 1
그래서 1+2+3
대박이군..
자연수 n을 문자열로 바꾼 후에 계산
using System;
public class Solution {
public int solution(int n) {
int answer = 0;
string leng="";
for(int i = 0; i<n.ToString().Length; i++){
leng = n.ToString().Substring(i,1);
answer=answer+int.Parse(leng);
}
return answer;
}
}