문제 : https://www.acmicpc.net/problem/2033


[ 알고리즘풀이 ]

 m = 10, 100, 1000 순서로 10배씩 증가시켜가며 N이 m 보다 크다면 반올림을 진행한다. 이때, N % m 을 하면 반올림 기준이 되는 숫자를 얻을 수 있고, 올림을 하던 내림을 하던 그 부분은 0으로 바꿔야하므로 다시 N에서 빼준다. 그 후, 올림을 해야되면 m 을 더해주면 된다.

ex) 13524

10보다 크므로 N % m 인 4를 얻는다. 그 후, 4를 빼서 13520으로 만들고 4는 올림 대상이 아니므로 넘어간다.

100보다 크므로 N % m 인 20을 얻는다. 그후 20을 빼서 13500으로 만들고 20은 올림 대상이 아니므로 넘어간다.

같은 과정을 반복한다.

#include<iostream>

using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0); cout.tie(0);

	int N, m = 10, t;
	cin >> N;
	while (N > m) {
		t = N % m;
		N -= t;
		if (t >= 5 * (m / 10))
			N += m; //올림진행
		m *= 10;
	}
	cout << N;
}

 

+ Recent posts