문제:
정수 N이 주어져 있을 때 이 수가 10보다 크면 일의 자리에서 반올림을 하고, 이 결과가 100보다 크면 다시 10의 자리에서 반올림을 하고, 또 이 수가 1000보다 크면 100의 자리에서 반올림을 하고..(이하 생략) 이러한 연산을 한 결과를 출력하시오.
입력:
첫째 줄에 정수 N이 주어진다. (0<=N<=99,999,999)
출력:
첫째 줄에 위와 같은 연산을 한 결과를 출력하시오.
풀이방법:
뒷자리에서 부터 하나씩 반올림을 하면서 진행하면 된다. 반올림을 하려고 하는 자릿수가 5이면 앞자리에 1을 더해주고, 그렇지 않다면 그 자리를 0으로 바꾼 뒤 그대로 이어붙이면 된다. 그런데 반올림을 하는 자리의 수가 5이상이고 1을 받는 자리가 9이면 문제가 발생한다. 이 경우에는 9가 1을 받아서 10이 되기 때문에 그 앞자리까지에도 영향을 받게 된다.
이를 int 연산으로 바꾸어서 진행을 했다면 문제가 없겠지만 str의 슬라이싱을 사용해서 문제를 풀고 있기 때문에 이 경우를 따로 예외 케이스로 만들어서 해결해 주도록 한다.
1
2
3
4
5
6
7
8
9
10
11
12
|
n=input()
idx=-1
while len(n[idx:])!=len(n):
if n[idx] >='5':
if int(n[idx-1])+1>=10:
n=str(int(n[:idx]+'0')+int(n[idx-1])+1)+'0'*(len(n[idx:])-1)
else:
n=n[:idx-1]+str(int(n[idx-1])+1)+'0'*len(n[idx:])
else:
n=n[:idx]+'0'*len(n[idx:])
idx-=1
print(n)
|
cs |
문제링크:
https://www.acmicpc.net/problem/2033
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1012. 유기농 배추 (0) | 2020.01.21 |
---|---|
[BOJ]10815. 숫자카드 (0) | 2019.12.13 |
[BOJ]10409. 서버 (0) | 2019.12.09 |
[BOJ]5032. 탄산음료 (0) | 2019.12.08 |
[Programmers]Lv 4. 서울에서 경산까지 (0) | 2019.12.07 |