기억보다는 기록을 해볼까

리모콘 1107 (백준으로 C++ 공부하기 28일차) 본문

백준으로 C++ 공부하기

리모콘 1107 (백준으로 C++ 공부하기 28일차)

옥상에서 2021. 12. 9. 20:15
728x90

처음에 브루트포스로 안풀었더니 시간초과가 나와서 검색을 동원해 결국 브루트포스로 풀었다.

 

아래는 브루트포스로 푼게 아닌 답이다.

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n; cin >> n;
    int m; cin >> m;
    bool arr[10];
    for(int i = 0; i < m; i++) {
        int a; cin >> a;
        arr[a] = true;
    }

    if(n == 100) {
        cout << "0";
        return 0;
    }
    int minNum = abs(n - 100);

    int cur = n;
    int plus;
    while(1) {
        bool no = false;
        plus = cur;
        string str = to_string(plus);
        for(int i = 0; i < str.size(); i++) {
            if(arr[str[i] - 48] == true) {
                no = true; 
            }
        }
        if(no == true) {
            cur++;
        }
        else break;
    }

    cur = n;
    int minus;
    while(1) {
        bool no = false;
        minus = cur;
        string str = to_string(minus);
        for(int i = 0; i < str.size(); i++) {
            if(arr[str[i] - 48] == true) {
                no = true; 
            }
        }
        if(no == true) {
            cur--;
        }
        else break;
    }

    int diff = min(plus - n, n - minus);
    
    int tmp = n;
    string str = to_string(tmp);
    int p  = str.length() + diff;
    int ans = min(p, minNum);
    cout << ans;
}
728x90
Comments