<문제 설명>
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를 들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
제한사항
N의 범위 : 100,000,000 이하의 자연수
<해결 과정>
1. string으로 바꿔서 풀지
2. 10으로 나눈 값을 array에 넣어서 더할지
3. array에 넣지 않고 바로 더한 값을 출력할지
3가지 방법으로 고민하다가 3번 방법으로 문제를 해결하였습니다.
int형을 자릿수 마다 나눠서 더할 때에 제일 먼저 생각난 방법이 바로 String으로 바꾼 후
split을 사용하는 방법이였는데 그렇게 형변환을 하지 않고 int 그대로 푸는 방법을 선택하였습니다.
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
//10으로 나눈 나머지가 n의 자리값
while(n > 0){
answer += n%10;
System.out.println("n의 변화 "+n);
//n은 그 다음 자릿수가 되어야 함
n/=10;
}
return answer;
}
}
<느낀 점>
가독성이 좋은 코드를 짜는것이짜는 것이 중요할지 효율성이 좋은 코드를 짜는 것이 중요할지...?
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
String[] array = String.valueOf(n).split("");
for(String s : array){
answer += Integer.parseInt(s);
}
return answer;
}
}
배열을 따로 생성해서 넣을 필요는 없지만
보기에 깔끔한 것 같아서 추가하였습니다.
이렇게 하면 int형을 문자형으로 변환하여 나눈뒤, 더할 때에는 다시 형변환을 하는,,,
복잡한 방법이긴 한데 보기가 쉽긴 하네요..ㅎ
+추가 생각
아스키 코드 값인 번호를 빼서 하는 방법도 참신하다
'0'부터 '9'까지 아스키코드는 48부터 57이고, 아스키코드값인 48을빼게 되면 그 차이만큼 반환되게 되는데,
그 차이가 숫자와 같아서 arr[i] - '0' 또는 arr[i] - 48로 형변환을 리소스를 크게 사용하지 않고 가능!
char[] arr = Integer.toString(n).toCharArray();
for(int i = 0; i < arr.length; i++){
answer += arr[i] - 48;
}
코드의 세상은 무궁 무진!
'주니어 기초 코딩공부 > JAVA_programmers_코딩테스트' 카테고리의 다른 글
자연수 뒤집어 배열로 만들기_programmers_lev01_str.charAt() (0) | 2023.07.01 |
---|---|
문자열 내 p와 y의 개수_programmers_lev01_toCharArray (2) | 2023.06.30 |
짝수와 홀수_programmers_lev01_삼항 연산자 (0) | 2023.06.20 |
분수의 덧셈_programmers_lev00 (0) | 2023.01.05 |
구슬을 나누는 경우의 수_programmers_lev00 (0) | 2023.01.04 |