728x90

www.acmicpc.net/problem/1107

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

버튼 10개가 모두 고장났을 때를 반드시 처리해줘야 한다. 안 그러면 무한루프에 빠지게 된다.

1씩 늘리거나 줄이면서 이 숫자를 리모컨으로 입력할 수 있을 때까지 반복한다.

입력할 수 있으면 while문에서 나온다. 그리고 100에서 이동하는 것과 버튼으로 누른 후 + 버튼이나 - 버튼으로 이동하는 것 중 어떤 것이 더 빠른지를 체크하면 된다.

int를 string으로 변경하는 것은 <string> 헤더에 있는 to_string() 함수를 사용하여 해당 채널로 가려면 숫자 버튼을 몇 번 눌러야 하는지 알아내었다.

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;

int main() {
	cin.tie(NULL);
	ios::sync_with_stdio(false);
	int n, m, num;
	vector<bool> v(10, true);
	cin >> n >> m;
	int ans;
	for (int i = 0; i < m; i++) {
		cin >> num;
		v[num] = false;
	}
	int k = 0;
	bool up;
	if (m < 10) {
		while (true) {
			int divider = 1;
			bool answer = true;
			if (n - k > 0) {
				while (true) {
					if ((n - k) / divider == 0) {
						break;
					}
					if (!v[(n - k) / divider % 10]) {
						answer = false;
						break;
					}
					divider *= 10;
				}
				if (answer) {
					ans = k;
					up = false;
					break;
				}
			}
			else if (n - k == 0) {
				if (!v[0]) {
					answer = false;
				}
				if (answer) {
					ans = k;
					up = false;
					break;
				}
			}
			answer = true;
			if (n + k == 0) {
				if (!v[0]) {
					answer = false;
				}
				if (answer) {
					ans = k;
					up = true;
					break;
				}
			}
			divider = 1;
			while (true) {
				if ((n + k) / divider == 0)
					break;
				if (!v[(n + k) / divider % 10]) {
					answer = false;
					break;
				}
				divider *= 10;
			}
			if (answer) {
				ans = k;
				up = true;
				break;
			}
			k++;
		}
	}
	else {
		cout << abs(n - 100);
		return 0;
	}
	cout << min((int)(ans + to_string((up ? n + k : n - k)).size()), abs(n - 100));
	return 0;
}
728x90

'알고리즘 문제' 카테고리의 다른 글

[백준] 1890번 점프  (0) 2021.01.13
[백준] 1676번 팩토리얼 0의 개수  (0) 2021.01.13
[백준] 1013번 Contact  (0) 2021.01.08
[백준] 10974번 모든 순열  (0) 2021.01.05
[백준] 1992번 쿼드트리  (0) 2021.01.05

+ Recent posts