< 문제 정보 >
[ 문제 ]
정수 N에 대하여, 10보다 클 경우 일의 자리에서 반올림, 100보다 클 경우 십의 자리에서 반올림하는 형식의 연산 결과를 출력해보자
[ 예시 ]
(1) 입력 : 314
- 출력 : 300
(2) 입력 : 1520
- 출력 : 2000[ 규칙 ]
(1) 첫째 줄에 정수 N이 주어진다
( 0 ≤ N ≤ 99,999,999)[ 백준 ]
- 브론즈 1 / C언어
- 출처 : 백준 - https://www.acmicpc.net/problem/2033
< 풀이 >
(1) 나누기 연산( / )과 나머지 연산( % )을 이용하여 각 자리 수를 나눠 사용한다.
Ex) 152 % 10 = 2
152 / 10 = 15
15 / 10 = 5
(2) 각 자리 수에 대하여 올림할 것인지, 내림을 할 것이지 고려한다.
- 올림인 경우 : 5 < n < 9
- 올림이 발생할 경우, 현재 n 값에서 +10을 통해 올림을 발생시킨다.- 내림인 경우 : n < 4
(3) 최종 출력 값은 가장 앞 자리 수를 제외하고, 모두 0이 된다. 때문에 계산을 하면서 몇 자리 수인지 count를 하고, 출력 전에 자리 수 × 10을 해야 한다.
Ex) 314의 경우, 3자리 수이기 때문에 올림 내림 모두 계산 후, 3 × 100을 하여 300을 출력 시킨다.
< 코드 >
/*백준 - 2033번 [반올림 ] : 사용자로부터 받은 정수가 십의 자리일 경우 일의 자리를 반올림, 백의 자리일 경우 십의 자리를 반올림하는 형식의 프로그램*/ #include <stdio.h> int main() { int result, n, i, count = 0; // 최종 결과값 변수, 사용자에게 받은 정수 값, count+1의 자리수 scanf("%d", &n); result = n; while (n /10 > 0) { if (n % 10 > 4) // 올림 발생 n = n + 10; n = n / 10; count++; } for (int i = 0; i < count; i++) n = 10 * n; printf("%d", n); }
< 실수했던 점 >
문제를 잘 못 이해해서 천의 자리 수일 경우, 십의 자리에서 반올림, 백의 자리에서 반올림하는 식으로 2번의 반올림을 발생시켰어야 했는데, 십의 자리에서만 반올림이 발생시키라는 식으로 문제를 잘 못 이해했다..