브루트포스 알고리즘은 많이 풀어본 적이 없어서 한 번 시도해봤다. 개인적으로 브루트포스 알고리즘은 그냥 모든 조건을 내가 일일히 생각해서 맞춰나갸야 해서 시간 소모가 큰 것 같다.
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
int main() {
int targetChannel;
int numOfBrokenButtons;
int *brokenButtons = new int[numOfBrokenButtons];
cin >> targetChannel >> numOfBrokenButtons;
for (int i = 0; i < numOfBrokenButtons; i++) {
cin >> brokenButtons[i];
}
if (targetChannel == 100) {
cout << 0;
return 0;
}
if (numOfBrokenButtons == 0) {
cout << min(abs(targetChannel - 100), int(to_string(targetChannel).length()));
return 0;
}
if (numOfBrokenButtons == 10) {
cout << abs(targetChannel - 100);
return 0;
}
if (numOfBrokenButtons == 9) {
bool isZeroBroken = false;
for (int i = 0; i < numOfBrokenButtons; i++) {
isZeroBroken = brokenButtons[i] == 0;
if (isZeroBroken)
break;
}
if (!isZeroBroken) {
cout << min(abs(targetChannel - 100), 1 + targetChannel);
return 0;
}
}
bool found = false;
int channel = targetChannel;
int numOfPush1;
while (!found)
{
for (int i = 0; i < numOfBrokenButtons; i++) {
string channelStr = to_string(channel);
string buttonStr = to_string(brokenButtons[i]);
if (channelStr.find(buttonStr) != string::npos) {
found = false;
break;
};
found = true;
}
if (!found) {
channel++;
}
}
numOfPush1 = min(int(to_string(channel).length() + (channel - targetChannel)),abs(targetChannel-100));
found = false;
channel = targetChannel;
int numOfPush2;
while (!found)
{
for (int i = 0; i < numOfBrokenButtons; i++) {
string channelStr = to_string(channel);
string buttonStr = to_string(brokenButtons[i]);
if (channelStr.find(buttonStr) != string::npos)
{
found = false;
break;
};
found = true;
}
if (!found) {
channel--;
}
if (channel < 0) {
break;
}
}
numOfPush2 = min(int(to_string(channel).length() + (targetChannel - channel)),abs(targetChannel-100));
if(channel < 0) {
numOfPush2 = 500001;
}
cout << min(numOfPush2, numOfPush1);
}
애초에 브루트포스 알고리즘 자체가 삽질인 것 같다…
백준 게시판에서 계속 반례들 보면서 코드를 조금씩 수정하니 정답이 나왔다.
🙅
풀이 4번의 조건이 왜 필요한 지 모르겠다…
글 읽기 - **리모컨 질문게시판에있는 모든 반례 모음**
nicklasjang님의 댓글