2020-11-08
문제
정수 N이 주어져 있을 때 이 수가 10보다 크면 일의 자리에서 반올림을 하고, 이 결과가 100보다 크면 다시 10의 자리에서 반올림을 하고, 또 이 수가 1000보다 크면 100의 자리에서 반올림을 하고.. (이하 생략) 이러한 연산을 한 결과를 출력하시오.
입력
첫째 줄에 정수 N이 주어진다. (0 ≤ N ≤ 99,999,999)
출력
첫째 줄에 위와 같은 연산을 한 결과를 출력하시오.
import java.util.Scanner;
public class TemplateA {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String n = scan.next();
int [] arr = new int [n.length() + 2];
int temp = 0;
//n의 초기 문자위치 지정할 변수
for(int i = 2; i < arr.length; i++) {
arr[i] = n.charAt(temp) - '0';
temp++;
}
//초기배열 {0,0,1,5}
//올림을 생각해 앞에 자리 여유를 줌
for(int i = arr.length - 1; i > 2; i--) {
if(arr[i] >= 5) {
arr[i] = 0;
arr[i -1] += 1;
}else {
arr[i] = 0;
}
}
//맨끝자리부터 앞에 한자리를 제외한 숫자 까지 반올림
if(arr[2] > 9) {
int mok = arr[2] / 10;
int nmg = arr[2] % 10;
arr[1] += mok;
if(nmg >= 5) {
arr[1] += 1;
}else {
arr[2] = 0;
}
}
//첫자리 올림이 있엇나 비교함
//올림이 있으면 목만큼 올려주고
//나머지가 5가 아닐 경우 0을 대입함
if(arr[1] == 0) {
for(int i = 2; i <arr.length; i++) {
System.out.print(arr[i]);
}
}else {
for(int i = 1; i <arr.length; i++) {
System.out.print(arr[i]);
}
}
}
}
출처링크: www.acmicpc.net/problem/2033