문제 : 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;
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 6986 : 절사평균 - travelbeeee (0) | 2020.01.22 |
---|---|
[BOJ] 2028 : 자기복제수 - travelbeeee (0) | 2020.01.21 |
[BOJ] 15975 : 화살표 그리기 - travelbeeee (0) | 2020.01.21 |
[BOJ] 2551 : 두 대표 자연수 - travelbeeee (0) | 2020.01.20 |
[BOJ] 18245 : 이상한 나라의 암호 - travelbeeee (0) | 2020.01.17 |