알고리즘_23번-2021.11.10

Jonguk Kim·2021년 11월 10일
0

알고리즘

목록 보기
3/15

1. 문제: 자연수 뒤집어 배열로 만들기

  • 문제 설명

    자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

  • 제한사항

    n은 10,000,000,000이하인 자연수입니다.

  • 입출력 예


2. 설계 및 구현

  • 분류
    • 입력값: long n
    • 처리: 숫자를 배열로 변경 후, 내림차순 정렬
    • 출력값: 정수형 배열 int[]
  • 생각
    • 입력 받은 숫자를 숫자 배열로 저장 => ArrayList 사용, add() 사용
    • 내림차순 정렬 => 10으로 나눈 나머지 / 몫 이용
  • 성공코드
import java.util.*;

class Solution {
    public int[] solution(long n) {     
        int[] result = {};
        int mod = 0;
        ArrayList<Integer> arrList = new ArrayList<>();
        
        // 1. 10으로 나눈 나머지로 자릿수 구함 (내림차순)
        // 2. 10으로 나눈 몫으로 자릿수 이동
        while(n > 0){
            mod = (int) (n % 10);
            arrList.add(mod);
            n /= 10;
        }
        
        result = new int[arrList.size()];   // 3. 담겨진 길이 만큼 배열 선언
        
        for (int i = 0; i < result.length; i++)
            result[i] = arrList.get(i);     // 4. 배열 저장
        
        return result;
    }
}
  • 참조코드_1
class Solution {
  public int[] solution(long n) {
 
        // 문자열 + 숫자 = 문자열
        String a = "" + n;
        
        int[] answer = new int[a.length()];
        
        int cnt = 0;
        
        while (n > 0) {
 
            // 1) 12345 % 10 = 5
            // 2) 1234 % 10 = 4
            // 3) 123 % 10 = 3
            // 4) 12 % 10 = 2
            // 5) 1 % 10 = 1
            answer[cnt] = (int) (n % 10);
 
            // 12345 = 1234
            // 1234 = 123
            // 123 = 12
            // 12 = 1
            // 1 = 0 ( 0.1 )
            n /= 10;
 
            cnt++;
        }      
        return answer;
  }
}
  • 참조코드_2
class Solution {
  public int[] solution(long n) {
        // long → String      
        String s = String.valueOf(n);
        
        // reverse()메소드를 이용하기 위하여 
        // StringBuilder 인스턴스 생성
        StringBuilder sb = new StringBuilder(s);
        
        // reverse()로 문자열 뒤집기
        sb = sb.reverse();
        
        // String.split("")로 한 글자씩 잘라 배열에 담기
        String[] stringArr = sb.toString().split("");
        
        // 문자열 길이 만큼 배열 길이 할당
        int[] answer = new int[sb.length()];
        
        // String → int → int[]
        for (int i=0; i < sb.length(); i++) {
            answer[i] = Integer.parseInt(stringArr[i]);
        }
      
        return answer;
  }
}

3. 배운 것 / 느낀점

  • 성공코드: 입력값 데이터형식 long 이여서 (int) (수식) 넣어야 함
  • 참조코드_1
    • 문자열.length(): 문자열 길이
    • 문자열 + 숫자 = 문자열
  • 참조코드_2
    • StringBuilder 인스턴스 -> 인스턴스.reverse(): 문자열 뒤집기
    • 문자열/객체.toString(): 문자열로 변환
    • Integer.parseInt(문자열): 문자열을 숫자로 변환
profile
개발일지

0개의 댓글