본문 바로가기

Programming/알고리즘 공부

[CodeUp] 정수 1개 입력받아 나누어 출력하기

반응형

문제

다섯 자리로 이루어진 하나의 정수를 입력받는다.
입력받은 정수를 자릿수 별로 분리한 후 아래와 한 줄에 하나씩 [ ] 속에 넣어 출력한다.
(단, 10,000 <= 입력받는 수 <= 99,999 )

입력 예시  

75254

출력 예시

[70000]
[5000]
[200]
[50]
[4]

답안

import java.util.Scanner;
import java.lang.Math;

public class Main{
    public static void main (String[] args) {
        Scanner num = new Scanner(System.in);
        int input = num.nextInt();
        
        if(10000 <= input && input <= 99999) {
        
            String strNum = Integer.toString(input);
            int[] arrNum = new int[strNum.length()];
            
            for(int i = 0; i<strNum.length(); i++) {
                arrNum[i] = input % (int)Math.pow(10, i + 1);
                input -= arrNum[i];
            } 
            for(int i = arrNum.length-1; i>=0; i--) {
                System.out.printf("[%d]\n", arrNum[i]);
            }
        }   
    }
}

 

  1. 정수 변수 input에 정수 입력값을 받는다.
  2. 문자열 변수 strNum에 Integer.toString(input)을 통해 정수를 문자열로 변환한다.(최대 자릿수를 구하기 위함)
  3. arrNum 배열 선언 후 strNum의 길이를 arrNum 배열 길이로 한다.
  4. 첫번째 반복문 실행. 1의 자리부터 하나씩 구하는 동시에 Math.pow를 사용해 10의 거듭제곱을 수행하게 하면 구하고자 하는 숫자의 최대 자릿수만큼 10이 거듭제곱을 수행한다.(최대 자릿수 = strNum.length())
  5. input -= arrNum[i]을 통해 기존 값에서 나눈 나머지 값을 뺀다.
  6. 두번째 반복문 실행. arrNum 배열에는 입력된 숫자가 반대로 입력되어 있다.(123이 입력 숫자라면 3, 20, 100 순서로 arrNum 배열에 값이 있다는 의미) 
    따라서 배열을 반대로 실행해야 원래 순서대로 값을 뽑아낼 수 있다.

위의 설명을 예시를 통해 알아보자.

입력 값이 123이라고 하면,

input = 123(정수)

strNum = 123(문자열)

따라서 strNum.length() == 3 이 나오기 때문에 입력 값의 최대 자릿수를 구할 수 있다.

arrNum[i] = input % (int)Math.pow(10, i + 1); 수행한다.

i = 0 이면,

arrNum[0] = 123 % (int)Math.pow(10, 0 + 1); 따라서 arrNum[0] = 3 이다.

input -= arrNum[i]; 즉 123 -= 3 이므로 123 - 3의 결과는 120 이다.

i = 1 이면,

arrNum[1] = 120 % (int)Math.pow(10, 1 + 1); 따라서 arrNum[1] = 20 이다.

input -= arrNum[1]; 즉 120 -= 20 이므로 120 - 20의 결과는 100 이다.

i = 2 이면,

arrNum[2] = 100 % (int)Math.pow(10, 2 + 1); 따라서 arrNum[1] = 100 이다.

input -= arrNum[2]; 즉 100 -= 100 이므로 100 - 100의 결과는 0 이다.

 

따라서 arrNum = {3, 20, 100} 이 담기게 된다.

arrNum 배열을 거꾸로 뽑아내면 된다.

 

 

 


 

참고

https://jamesyleather.tistory.com/164?category=830067 

 

[코드업/자바] 기초 100제 - 정수 1개 입력받아 나누어 출력하기

1025 : [기초-입출력] 정수 1개 입력받아 나누어 출력하기 1. 다섯 자리의 정수 1개를 입력받아 각 자리별로 나누어 출력한다. 참고 scanf("%1d%1d%1d%1d%1d", &a, &b, &c, &d, &e); 를 사용하면 1개의 숫자로 각..

jamesyleather.tistory.com

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/pow

 

Math.pow() - JavaScript | MDN

주어진 밑 값을 주어진 지수 값으로 거듭제곱한 숫자 값.

developer.mozilla.org

반응형