문제
다섯 자리로 이루어진 하나의 정수를 입력받는다.
입력받은 정수를 자릿수 별로 분리한 후 아래와 한 줄에 하나씩 [ ] 속에 넣어 출력한다.
(단, 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]);
}
}
}
}
- 정수 변수 input에 정수 입력값을 받는다.
- 문자열 변수 strNum에 Integer.toString(input)을 통해 정수를 문자열로 변환한다.(최대 자릿수를 구하기 위함)
- arrNum 배열 선언 후 strNum의 길이를 arrNum 배열 길이로 한다.
- 첫번째 반복문 실행. 1의 자리부터 하나씩 구하는 동시에 Math.pow를 사용해 10의 거듭제곱을 수행하게 하면 구하고자 하는 숫자의 최대 자릿수만큼 10이 거듭제곱을 수행한다.(최대 자릿수 = strNum.length())
- input -= arrNum[i]을 통해 기존 값에서 나눈 나머지 값을 뺀다.
- 두번째 반복문 실행. 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
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/pow
'Programming > 알고리즘 공부' 카테고리의 다른 글
[LeetCode] Add Binary | 난이도: Easy (0) | 2021.09.14 |
---|---|
[LeetCode] Plus One | 난이도: Easy (0) | 2021.09.12 |
[LeetCode] Length of Last Word | 난이도: Easy (0) | 2021.08.20 |
[LeetCode] Maximum Subarray | 난이도: Easy (0) | 2021.08.18 |
[LeetCode] Search Insert Position | 난이도: Easy (0) | 2021.08.16 |