www.acmicpc.net/problem/1107

 

1107번: 리모컨

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

www.acmicpc.net

이 문제는 나한테는 너무 악질같은 문제였다.

 

반례도 많은 데다가 런타임 에러까지 발생하니 너무 시간이 오래걸렸다.

 

또한 생각치도 못한 반례가 있어서 결국 못풀다가 답을 보고 풀 수 있었다ㅠㅠ

 

그냥 N*2의 모든 숫자들을 검색해서 최솟값을 찾는 것이 중요한 문제였는데 난 문자열로 바꾸어서 하나씩 비교해가며 찾는 잘못된 방식을 택하고 있었다.

 

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

bool broken[10];

int check(int c) {
	if (c == 0) {
		if (broken[0]) {
			return 0;
		}
		else {
			return 1;
		}
	}
	int len = 0;
	while (c > 0) {
		if (broken[c % 10]) {
			return 0;
		}
		c = c / 10;
		len += 1;
	}
	return len;
}

int main() {
	int n, m, x;
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		cin >> x;
		broken[x] = true;
	}
	int result = abs(n - 100);
	for (int i = 0; i <= 1000000; i++) {
		int c = i;
		int len = check(c);
		if (len > 0) {
			int press = abs(c - n);
			if (result > press + len) {
				result = press + len;
			}
		}
	}
	cout << result;
	return 0;
}

참고 블로그: seol-limit.tistory.com/48

 

[Baekjoon] 백준 1107번 리모컨

1107번 리모컨 문제 풀이 문제 수빈이는 TV를 보고 있다. 수빈이는 채널을 돌리려고 했지만, 버튼을 너무 세게 누르는 바람에, 일부 숫자 버튼이 고장났다. 리모컨에는 버튼이 0부터 9까지 숫자, +

seol-limit.tistory.com

 

+ Recent posts