문제링크: https://programmers.co.kr/learn/courses/30/lessons/12932
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.제한 조건
n은 10,000,000,000이하인 자연수입니다.
public int[] solution(long n) {
String str = String.valueOf(n);
char[] s = str.toCharArray();
int[] answer = new int[str.length()];
for(int i=str.length()-1;i>=0;i--) {//뒤집어서 입력
answer[str.length()-1-i] = str.charAt(i)-'0';
}
return answer;
}
str.charAt(i)만 입력하면, [53, 52, 51, 50, 49] 이렇게 입력이 된다. 이유는 char형을 int형으로 형변환하면 아스키코드값으로 변환되기 때문에, 문자 '1'을 int형으로 변환하면 아스키코드 값인 49로 변환된다. 1을 가지기 위해서는 아스키코드값이 48인 '0'을 빼줘야한다. 49에서 48을 빼서 1을 얻게 된다. '2'는 아스키코드 값이 50, '3'은 51, '4'는 52, '5'는 53이다. 그래서 아스키코드값이 48인 '0'을 각자 빼주면, 1,2,3,4,5 원하는 값을 얻게 된다.
public int[] solution2(long n) {
String s =""+n; //String에 n 추가
int[] answer = new int[s.length()];//입력받은 숫자의 길이만큼
int cnt=0;
while(n>0) {
answer[cnt]=(int)(n%10);//12345 -> 나머지 5 -> 4 -> 3 -> 2 ->1
n/=10; // n=1234 -> 123 -> -> 12 -> 1
cnt++;
}
return answer;
}
간단하게 %와 /= 이용해서 원하는 값을 얻을 수 있다.
솔루션 1에 char[] s = str.toCharArray(); 이코드는 왜있는건가요??