자연수 뒤집어 배열로 만들기 (자바)

김재현·2024년 4월 16일
0

알고리즘 풀이

목록 보기
68/89
post-custom-banner

오랜만에 알고리즘 문제로의 복귀 + 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 배열에 대입한다.

다른 사람 풀이 1

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;
  }
}

이 분은 자리수를 이렇게 구했구나 싶다. 역시 코딩은 생각하기 나름.

다른 사람 풀이 2

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부터가 익숙하지 않다...

  1. new StringBuilder()를 선언하고
  2. append(n) 으로 숫자 n을 StringBuilder에 추가한다. 이 때, StringBuilder니까 문자열로 추가가 된다.
  3. reverse() 로 뒤집는다.
  4. chars() 문자열을 문자 스트림으로 변환한다.
  5. 문자 스트림의 각 문자를 숫자 값으로 변환한다. 그런데 이 때, Character.getNumericValue 메소드를 사용하여 문자를 해당하는 숫자 값으로 변환한다.
    (getNumericValue: 주어진 문자가 0부터 9까지의 숫자인 경우 해당 숫자의 값을 반환하고, 그렇지 않은 경우 -1을 반환)
  6. toArray() 마지막으로 배열로 바꿔준다.

나는 Character.getNumericValue 대신, 더 익숙한 Integer.parseInt(String.valueOf(char)) 를 사용하게 될 것 같다.

또한 :: 보다는 람다식을 사용하는게 익숙하니 내 방식대로 써본다면 아래와 같이 되겠다.

return new StringBuilder().append(n).reverse().chars()
				.map(a -> Integer.parseInt(String.valueOf((char)a))).toArray();

굳이 문자열로 한번 더 바꾸지만 getNumericValue이 기억 안난다면 이렇게 해야겠다.


스트림으로 풀이한 경우가 내가 처음 풀이한 것 보다 월등히 느리게 나왔다..! 역시 변환을 여러번 하니 느려질 수 밖에 없다. 멋과 실용성은 다른 것으로.

profile
I live in Seoul, Korea, Handsome
post-custom-banner

0개의 댓글