오랜만에 알고리즘 문제로의 복귀 + IDE없이 손코딩 으로 인해 난이도가 급격히 낮아졌지만 열심히 해보자!
import java.util.*;
class Solution {
public int[] solution(long n) {
// n의 자리수 구하기
int index=0;
for(int i=1;;i++){
if(n/(Math.pow(10,i-1)) < 1) {
index=i-1;
break;
}
}
int[] answer = new int[index];
String[] array = String.valueOf(n).split("");
for(int i=0;i<index;i++) {
answer[i] = Integer.parseInt(array[index-i-1]);
}
return answer;
}
}
우선 n의 자리수로써 index를 구해준다.
그 뒤 n을 String 배열로 만들고, 앞서 구한 자리수를 이용하여 answer 배열에 대입한다.
class Solution {
public int[] solution(long n) {
String a = "" + n;
int[] answer = new int[a.length()];
int cnt=0;
while(n>0) {
answer[cnt]=(int)(n%10);
n/=10;
System.out.println(n);
cnt++;
}
return answer;
}
}
이 분은 자리수를 이렇게 구했구나 싶다. 역시 코딩은 생각하기 나름.
import java.util.stream.IntStream;
class Solution {
public int[] solution(long n) {
return new StringBuilder().append(n).reverse().chars().map(Character::getNumericValue).toArray();
}
}
이걸 IDE 없이 손코딩으로 할 수 있을까 싶다.
오랫만에 본 StringBuilder부터가 익숙하지 않다...
나는 Character.getNumericValue
대신, 더 익숙한 Integer.parseInt(String.valueOf(char))
를 사용하게 될 것 같다.
또한 :: 보다는 람다식을 사용하는게 익숙하니 내 방식대로 써본다면 아래와 같이 되겠다.
return new StringBuilder().append(n).reverse().chars()
.map(a -> Integer.parseInt(String.valueOf((char)a))).toArray();
굳이 문자열로 한번 더 바꾸지만 getNumericValue이 기억 안난다면 이렇게 해야겠다.
스트림으로 풀이한 경우가 내가 처음 풀이한 것 보다 월등히 느리게 나왔다..! 역시 변환을 여러번 하니 느려질 수 밖에 없다. 멋과 실용성은 다른 것으로.