[BOJ] 1107 : 리모컨
풀이
부르트포스
또 부르트포스로 가능한 문제인데 어떻게 효율적으로 풀까 고민하다가 시간을 날렸다.
제한이 50만이고 가능한경우가 100만까지밖에 없으니까 O(n)이면 충분한 시간이다.
100만가지 전부를 살펴보면 되는 문제이다.
시간복잡도 분석을 해보고 바로 브루트 포스 방법부터 접근하도록 마인드를 가져야겠다.
브루투 포스방법은 짜고나면 무조건 맞을것이므로 속이편하다.
코드
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
using namespace std;
//1이면 고장난거
int but[10];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
if (n >= 98 && n <= 103) {
cout << abs(100 - n);
return 0;
}
int m;
cin >> m;
for (int i = 0; i < m; i++) {
int tmp;
cin >> tmp;
but[tmp] = 1;
}
int cnt = abs(n-100);
for (int i = 0; i <= 1000000; i++) {
int tempCnt = 0;
int tmp = i;
int flag = 0;
if (i == 0) {
tempCnt++;
if (but[0] == 1)
continue;
}
while (tmp > 0) {
if (but[tmp % 10] == 1) {
flag = 1;
break;
}
tempCnt++;
tmp /= 10;
}
if (flag) {
continue;
}
tempCnt += abs(n - i);
if (tempCnt < cnt)
cnt = tempCnt;
}
cout << cnt;
return 0;
}
Written on April 4, 2019