//개인 공부 기록용
프로그래머스 > Lv.1 > 코딩테스트 연습 > 연습문제 > 자릿수 더하기
-문제 설명
자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
-제한사항
N의 범위 : 100,000,000 이하의 자연수
-입출력 예 #2
9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.
[코드1] > RC (Reference Code): 남의 코드를 참고하여 해결한 경우
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
String str = String.valueOf(n);
for(int i=0; i<str.length(); i++) {
int intchar = Integer.parseInt(String.valueOf(str.charAt(i)));
answer+=intchar;
}
return answer;
}
}
정수를 문자로 변환한 뒤 다시 정수로 바꿔 각각 더해야겠다고 생각했다.
처음엔 split을 사용해서 짜야겠다는 생각이 들었었다. (문자열 쪼개기)
하지만 이 코드는 charAt()으로 문자열에 순서를 부여해 가져다 썼다.
한편, 정수=>문자열=>정수 방식 말고 나눗셈을 이용하는 방식도 있다.
String.valueOf()란?
=> ( ) 안에 든 것을 "문자열"로 바꿔줌.
1-1. toString()와 차이
? toString()도 문자열로 바꾸지 않았었나?
=> toString()은 오버라이딩과 관련된 개념임.
모든 객체가 상속받는 메서드로서 객체의 내용을 문자열로 표현하는 역할.
ex) "MyClass{" + "value=" + value + '}';
Integer.parseInt()란?
=> ( ) 안에 "문자열"을 입력받아 정수로 바꿔줌.
2-1. 왜 Integer.parseInt(str.charAt(i));이 아니라 Integer.parseInt(String.valueOf(str.charAt(i)));를 쓰는가?
=> chatAt()은 문자열이 아닌 문자를 반환하기 때문임. 그래서 문자열로 바꿔줘야 함.
[코드2]
public class Solution {
public int solution(int n) {
int answer = 0;
String str = String.valueOf(n);
String[] digits = str.split("");
for (String digit : digits) {
answer += Integer.parseInt(digit);
}
return answer;
}
}
split을 사용하여 문자열을 쪼개서 정수화한 후 더했다.
[코드2-1]
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
String str = String.valueOf(n);
String[] digits = str.split("");
for(int i=0; i < digits.length; i++) {
answer += Integer.parseInt(digits[i]);
}
split을 사용하되 for-each가 아닌, 배열 길이에 따라 순서대로 더하는 방식을 택했다.