자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.
N | answer |
---|---|
123 | 6 |
987 | 24 |
import java.util.*;
public class Solution {
public int solution(int n) {
int answer = 0;
String strN = Integer.toString(n);
for(int i=0 ; i < strN.length() ; i++){
answer += Integer.parseInt(strN.substring(i,i+1));
}
return answer;
}
}
숫자를 문자열로 리턴
Integer.toString(int 숫자);
String.valueOf(int 숫자);
valueOf는 "null".equals(String 문자열) 형태로 null 체크
NPE를 방지하기 위해 toString 보다 valueOf 사용을 추천
참고블로그 : https://swjeong.tistory.com/146
문자열을 숫자로 리턴
Integer.parseInt(String 문자);
Integer.valueOf(String 문자);
참고블로그 : https://m.blog.naver.com/sthwin/221000179980
첫 번째 인자값의 위치를 시작으로 두 번째 인자값의 위치까지 포함한 문자열을 리턴
String str = "12345";
str.substring(0,2); // "123"
index 위치를 포함한 문자열을 리턴
String str = "12345";
str.substring(3); // "45"
index 위치의 문자를 char 타입으로 리턴
String str = "12345";
str.charAt(1); // "2"
regex 기준으로 문자열을 끊어서 배열에 저장
regex = |을 구분자로 하여 여러 기준으로 문자열을 나눌 수 있다.
split(String regex, int limit)
limit = 배열 최대 개수 (배열 개수만큼 문자열을 나눠 배열에 저장)
String str = "12345";
str.charAt("3") - '0'; // '3'
참고블로그 : https://velog.io/@shin_stealer/코딩테스트-준비-String-관련-문제에서-자주쓰이는-함수-정리JAVA
charAt()을 사용하면 내가 푼 방식보다 훨씬 더 간단하게 작성 가능할꺼같다.
일단 내가 푼 방식은 변환 작업이 많아 굉장히 복잡한데,
charAt은 바로 변환도 되고 메서드 사용도 적어 간편하다.
다른 답 보니까 와 이런 생각을... 싶더라. 좀만 더 생각해볼껄. 아쉽
public class Solution {
public int solution(int n) {
int answer = 0;
while(n>10){
answer+=n%10;
if(n<10)
break;
n=n/10;
}
return answer;
}
}
while(true)보다는 while문안에 조건으로 n<10을 넣었으니
while 조건을 n>10 조건을 넣는게 좋다. (참고로 n>0해도 해결됨)
디버깅 및 값 추적할때 while true같은 건 비추천.
https://school.programmers.co.kr/learn/courses/30/lessons/12931/solution_groups?language=java (위 내용은 사이트 댓글 참고)
public class Solution {
public int solution(int n) {
int answer = 0;
while(n!=0){
//num을 10으로 나눈 나머지를 sum에 더한다.
answer += n%10;
//num을 10으로 나눈 값을 다시 num에 저장한다.
n /= 10;
}
return answer;
}
}
나도 처음부터 split 생각을 했으나 한글자씩 쪼개는 기준을 못잡아서 패스한건데 공백 기준으로 하면 쪼개지는 문자열 보고 당황. 나중에 split 메서드 봐야겠네.
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;
}
}
어떤 로직이 정답을 도출해낼 때 효율적인가... 고심하는 과정
정답 아시는 분...? 다시 학원 가서 강사님한테 물어보고싶다...ㅠㅠ