문제: 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
가장 먼저 생각난 해결법은 숫자를 뒤에서부터 하나씩 꺼내서 배열에 넣는 방법이다.
class Solution {
public int[] solution(long n) {
String str = String.valueOf(n);
int[] answer = new int[str.length()];
int i = 0;
while (n > 0) {
answer[i] = (int)(n % 10); // 마지막 자리
n /= 10; // 마지막 자리 제거
i++;
}
return answer;
}
}
숫자를 문자열로 바꿔서 하나씩 꺼내기 쉽게 만드는 것
String 클래스의 valueOf() 메소드
다른 타입의 값을 문자열(String)로 바꿔준다
long n = 12345;
String str = String.valueOf(n);
👉 str = "12345"
숫자 상태에서는 각 자리에 바로 접근이 어려우므로 문자열로 바꿔서 한 글자씩 접근한다.
str.charAt(0) // '1'
str.charAt(1) // '2'
String.valueOf(n)
가장 많이 사용 👍
null 안전성도 좋음
n + ""
String str = n + "";
간단하지만 가독성 조금 떨어짐
Long.toString(n)
String str = Long.toString(n);
이것도 동일한 결과
특정 타입에 맞는 방식
문자 '5'를 숫자 5로 바꾸는 과정
char c = '5';
int num = c - '0';
이렇게 같이 쓰인다
str.charAt(i) - '0'
String str = "12345";
char c = str.charAt(0);
결과
c = '1'
컴퓨터는 문자를 내부적으로 숫자로 저장한다.
| 문자 | 실제 저장 값 (아스키 코드) |
|---|---|
| '0' | 48 |
| '1' | 49 |
| '2' | 50 |
| '3' | 51 |
👉 "문자 숫자에서 '0'을 빼면 진짜 숫자가 된다"
'3' - '0'
결과 👉 51 - 48 = 3