본문 바로가기

Algorithm & SQL/Baekjoon

[Algorithm] [Python] 백준/BOJ - 4539 _ 반올림

Baekjoon - 4539 / 반올림

문제


정수 x가 주어졌을 때, 10보다 크다면, 1의 자리에서 반올림하고, 결과가 100보다 크면, 10의 자리에서 반올림하고, 1000보다 크면, 100의 자리에서 반올림하고... 이와 같이 계속 반올림하는 프로그램을 작성하시오.

 

입력


첫째 줄에 테스트 케이스의 개수 n이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 정수 x가 주어진다. (0 ≤ x ≤ 99999999)

 

출력


각 테스트 케이스마다 입력으로 주어지는 정수를 문제 설명에 나온 것처럼 반올림한 결과를 출력한다.

 

제출 코드

from sys import stdin

def _4539(x):
    x = list(map(int, str(x)))

    if len(x) == 1:            # 1의 자리인 경우
        print(*x, sep='')

    else:
        length = len(x)
        for i in range(length-1, 0, -1):        # 1의 자리부터 접근
            if x[i] >= 5:
                x[i-1] = x[i-1] + 1
                x[i] = 0
            else:
                x[i] = 0
        print(*x, sep='')


for _ in range(int(stdin.readline())):
    x = int(stdin.readline())
    _4539(x)

코드 설명


문제의 핵심은 1의 자리부터 반올림을 진행해야 한다는 것이다.

 

만일 입력값의 길이가 1이라면, 즉 1의 자리 뿐인 숫자라면 이를 그냥 리턴하고 그 외의 경우에는 i의 자리값이 반올림 대상이라면 이를 0으로 바꾸고 i-1 자리 값을 1 올린다.

 

입력받은 수를 input 이라고 할 때, input[len-1]의 자리부터 input[0] 의 자리까지 반올림을 순차적으로 진행한다.