백준 4539번 [반올림 | python]
문제
정수 x가 주어졌을 때, 10보다 크다면, 1의 자리에서 반올림하고, 결과가 100보다 크면, 10의 자리에서 반올림하고, 1000보다 크면, 100의 자리에서 반올림하고... 이와 같이 계속 반올림하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 n이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 정수 x가 주어진다. (0 ≤ x ≤ 99999999)
출력
각 테스트 케이스마다 입력으로 주어지는 정수를 문제 설명에 나온 것처럼 반올림한 결과를 출력한다.
예제 입력 1
9 15 14 4 5 99 12345678 44444445 1445 446
예제 출력 1
20 10 4 5 100 10000000 50000000 2000 500
위의 예제 입력을 보면 왜 1445가 2000이 되어있는지 궁금할 수 있는데, 여기서 말하는 반올림이라는 것은 1445에서 일의자리에서 먼저 반올림 되고, 그 다음에 십의 자리, 백의 자리로 올라가면서 반올림하는 것을 말한다. 그래서 1445->1450->1500->2000이 되어서 1445의 출력값이 2000이 되는 것이다.
먼저 받을 값들의 개수를 받아서 array라는 배열에 순서대로 넣어주었고, 이 받은 값들을 1부터 그 수의 길이-1까지 길이-j, 길이-j+1로 뒤부터 수를 차례대로 가져와 다음수로 올림해주는 것을 반복하였다. python에서는 5가 있으면 앞부분이 짝수라면 내리고 홀수라면 올리는 방식을 round함수에서 수행하기 때문이다. 그래서 올릴자리의 수가 5라면 여기에 그 자리에 맞는 10^n값을 추가하여 반올림할때 문제가 없도록 만들어두었다.
a = int(input())
array = []
for i in range(0,a):
array.append(input())
result = []
for i in range(0, len(array)):
length = len(list(str(array[i])))
k = array[i]
for j in range(1, length):
if str(k)[length-j:length-j+1] == '5':
k = str(int(k) + 10**(j-1))
k = round(int(k),-j)
result.append(k)
for i in range(0, len(result)):
print(result[i])
Author And Source
이 문제에 관하여(백준 4539번 [반올림 | python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@shi3do/백준-4539번-반올림-python저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)