[ 백준 ] 2033번 - 반올림

NaHyun_kkiimm·2021년 7월 26일
0

알고리즘

목록 보기
4/18
post-thumbnail

< 문제 정보 >

[ 문제 ]

정수 N에 대하여, 10보다 클 경우 일의 자리에서 반올림, 100보다 클 경우 십의 자리에서 반올림하는 형식의 연산 결과를 출력해보자

[ 예시 ]

(1) 입력 : 314
- 출력 : 300
(2) 입력 : 1520
- 출력 : 2000

[ 규칙 ]

(1) 첫째 줄에 정수 N이 주어진다
( 0 ≤ N ≤ 99,999,999)

[ 백준 ]


< 풀이 >

(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번의 반올림을 발생시켰어야 했는데, 십의 자리에서만 반올림이 발생시키라는 식으로 문제를 잘 못 이해했다..

profile
이 또한 지나가리라

0개의 댓글