
문제 설명
자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.
제한 조건
n은 10,000,000,000이하인 자연수입니다.
입출력 예
| n | return |
|---|---|
| 12345 | [5,4,3,2,1] |
class Solution {
public int[] solution(long n) {
String tmp = String.valueOf(n);
int[] answer = new int[tmp.length()];
for(int i=0; i<tmp.length(); i++) {
answer[i] = tmp.charAt(tmp.length()-i-1) -'0';
}
return answer;
}
}
먼저 정수를 문자열로, 문자열을 문자로 변환하여 배열에 넣어야 겠다고 생각했다.
String.valueOf() : 어떤 값을 넣어도 문자열로 변환하는 함수Obeject.toString() : 문자열로 변환하는 함수이지만, 기본 자료형에 사용할 수 없다!length() 를 사용해서 문자열의 길이만큼 배열 크기를 지정해주었다.
for() 반복문안에서 charAt() 함수를 사용하여 한 문자씩 추출 후 아스키코드를 사용하여 정수 값으로 변환해 주었다.
import java.util.stream.IntStream;
class Solution {
public int[] solution(long n) {
return new StringBuilder().append(n).reverse().chars().map(Character::getNumericValue).toArray();
}
}
StringBuilder() : 문자열의 변경이 가능한 가변 클래스로, 동기화는 지원하지 않는다. (단일 쓰레드에서 성능 UP)
reverse() : StringBuilder 나 StringBuffer, Collections 등 에서 사용이 가능하다.
chars() : String 형을 Stream을 이용해서 char 형태로 추출이 가능하다. 아스키코드로 변환하거나, String을 List 형으로 변경할 때에 사용이 가능하다.
chars() 사용 예제
String str = "Hello World"; List<Character> charStr = new ArrayList<> (); str.chars().map(x -> x + 1).forEach(y -> charStr.add(Character.valueOf((char) y)));
getNumericValue() : 숫자 형태의 char 형을 int형으로 변환할 때 사용한다.
ClassName::MethodName : 메서드 레퍼런스로, 람다식 작성할 때 자주 사용된다.
메서드 레퍼런스 사용 예제
// Lambda Consumer<String> func = text -> System.out.println(text); // Method References Consumer<String> func = System.out::println;
더 다양한 함수를 사용하고, 깔끔한 코드를 짤 수 있도록 노력이 필요할 것 같다..!
이제 시작이니까 화이팅!
참고
https://colevelup.tistory.com/11
https://codechacha.com/ko/java8-method-reference/
https://yangbox.tistory.com/59
https://codechacha.com/ko/java-convert-string-to-chararray/