[Programmers/JAVA] 자연수 뒤집어 배열로 만들기

     

     

    코딩테스트 연습 - 자연수 뒤집어 배열로 만들기

    자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예 n return 12345

    programmers.co.kr

     

    틀렸다.. 아니 솔직히 말하면 풀지도 못했다..ㅎ

     

    😂 뭐가 틀렸나 보자 

    나의 로직 -> 최선은 다했답니다..

    1. 빈배열에 n을 담는다. -> long을 String으로 형변환을 먼저 해야 한다.
    2. n을 반복문 + charAt으로 한 글자씩 새로운 배열에 담는다.
         -> n % 10을 하면 된다. 나머지는 제일 마지막 숫자가 나옴 (ex. 12345 % 10 = 5) 
         -> n /= 10;을 하여 n의 값을 변경해준다. ( ex. 12345 / 10 = 1234 )
          -> 반복문을 돌면서 다시 n % 10 ( ex. 1234 % 10 = 4 )
    3. 내림차순으로 sorting 한다. -> 뒤집어서 배열에 담으라고 했지, 내림차순이라고 얘기한 적은 없기 때문에 굳이 sorting 할 필요가 없다.

     

     

    1. long을 String으로 변환하는 작업을 먼저 해야 한다.

    String num = String.valueOf(n);

    String.valueOf()를 이용해서 Object의 값을 String으로 변환한다.

     

    근데 여기서 질문

     

    🤔 toString()도 String으로 변환할 수 있는데?

    그럼 String.valueOf()와 어떤 점이 다른가요?

     

    바로 Object가 null일 경우 처리하는 방식이 다르다.

    *즉 null값에 따른 Null Point Exception(NPE) 발생 여부가 다른 것이다.

     

    먼저 String.valueOf()의 경우 Object가 null일 경우  "null" 문자열을 반환하지만

    toString()의 경우에는 대상 값이 null이면 NPE를 발생시키고 Object에 담긴 값이 String이 아니어도 출력한다.

     

    다른 사람의 코드를 디버깅하는 경우 NPE가 발생할 수 있고 이를 방지를 위해 String.valueOf()를 사용하는 것을 권장한다.

     

     

    2.  문자열 n의 길이만큼 int 배열 객체를 생성한다.

     int [] answer = new int[num.length()];

     

    3.  answer 배열의 길이만큼 반복해서 answer [i] 번째 인덱스에 값들을 차곡차곡 담아준다

    class Solution {
        public int[] solution(long n) {
            String num = String.valueOf(n);
            int [] answer = new int[num.length()];
        
            for(int i=0; i<answer.length;i++){
                answer[i] = (int)(n%10);
                n /= 10;
            }
            return answer;
        }
    }

     

     

    😁 올바른 로직으로 정리

    1. n % 10을 하면 나머지의 값을 answer [i] 번째 인덱스에 저장한다.
       왜? n % 10을 하면 나머지는 제일 마지막 숫자가 나옴 (ex. 12345 % 10 = 5) 
    2. n /= 10;을 하여 n의 값을 변경해준다. ( ex. 12345 / 10 = 1234 )
    3. i의 값을 증가시킨다.
    4. answer 배열의 길이까지 반복한다.
    5. 조건식이 true일 경우 다시 1번처럼 answer[i]번째 인덱스에 n % 10를 저장한다.( ex. 1234 % 10 = 4 )
      (=3번에서 i의 값이 1 증가했기 때문에 두 번째 인덱스에 4가 담긴다.) 
    6. 예시대로면 총 4회 반복된다. 실제로 반복문은 5회까지 수행하고 마지막이 false이기 때문에 코드 블록 안으로 들어오지 않는다. 따라서 반복문의 마지막은 false로 끝난다고 할 수 있다.
    7. int 배열을 return 한다.

     

    🌱 새롭게 배운 점

     

    • 자료형에 대한 아주 아주 깊은 이해가 필요하다는 것을 알았다. Object의 값을 String으로 바꾸는 방법 String.valueOf() 잊지 말자
    • (int) n%10을 해서 78점으로 오답처리가 되었다. (int)(n%10) 잘 묶어주자!
    • 예전에 %를 이용해서 자릿수를 더한 문제를 푼 적이 있었는데 자릿수를 똑똑 떼는 법인 % 와 /를 활용하는 법을 잘 기억하자.
    728x90

    댓글