๐Ÿ•๏ธ ICPC Sinchon/Binary Search

[BOJ][C++] ๋ฐฑ์ค€ 1107๋ฒˆ: ๋ฆฌ๋ชจ์ปจ

์„ ๋‹ฌ 2023. 1. 21. 02:22
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/1107

 

1107๋ฒˆ: ๋ฆฌ๋ชจ์ปจ

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.  ๋‘˜์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜ M (0 ≤ M ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์…‹์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ

www.acmicpc.net

 

๋ฌธ์ œ

์ˆ˜๋นˆ์ด๋Š” TV๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ์ฑ„๋„์„ ๋Œ๋ฆฌ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ, ๋ฒ„ํŠผ์„ ๋„ˆ๋ฌด ์„ธ๊ฒŒ ๋ˆ„๋ฅด๋Š” ๋ฐ”๋žŒ์—, ์ผ๋ถ€ ์ˆซ์ž ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋‹ค.

๋ฆฌ๋ชจ์ปจ์—๋Š” ๋ฒ„ํŠผ์ด 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž, +์™€ -๊ฐ€ ์žˆ๋‹ค. +๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ๋ณด๊ณ ์žˆ๋Š” ์ฑ„๋„์—์„œ +1๋œ ์ฑ„๋„๋กœ ์ด๋™ํ•˜๊ณ , -๋ฅผ ๋ˆ„๋ฅด๋ฉด -1๋œ ์ฑ„๋„๋กœ ์ด๋™ํ•œ๋‹ค. ์ฑ„๋„ 0์—์„œ -๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์ฑ„๋„์ด ๋ณ€ํ•˜์ง€ ์•Š๊ณ , ์ฑ„๋„์€ ๋ฌดํ•œ๋Œ€ ๋งŒํผ ์žˆ๋‹ค.

์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„์€ N์ด๋‹ค. ์–ด๋–ค ๋ฒ„ํŠผ์ด ๊ณ ์žฅ๋‚ฌ๋Š”์ง€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 

์ˆ˜๋นˆ์ด๊ฐ€ ์ง€๊ธˆ ๋ณด๊ณ  ์žˆ๋Š” ์ฑ„๋„์€ 100๋ฒˆ์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์ด๋™ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์ฑ„๋„ N (0 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค.  ๋‘˜์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์˜ ๊ฐœ์ˆ˜ M (0 ≤ M ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์…‹์งธ ์ค„์—๋Š” ๊ณ ์žฅ๋‚œ ๋ฒ„ํŠผ์ด ์ฃผ์–ด์ง€๋ฉฐ, ๊ฐ™์€ ๋ฒ„ํŠผ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ฑ„๋„ N์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ์„ ์ตœ์†Œ ๋ช‡ ๋ฒˆ ๋ˆŒ๋Ÿฌ์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

์™„์ „ํƒ์ƒ‰: ๋‹จ์ˆœํžˆ ๋ชจ๋“  ์ฑ„๋„์„ ๋ณด๋ฉด์„œ ๋ฒ„ํŠผ์œผ๋กœ ๋ˆ„๋ฅผ ์ˆ˜์žˆ๋Š”์ง€ ๋ณด๊ณ  ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ์— ํ•œํ•ด ์ฐจ์ด์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ–ˆ๋‹ค

// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    // ์ž…๋ ฅ
    int n, m, error;
    cin >> n >> m;
    vector<bool> button(10, true);
    for(int i=0; i<m; i++) {
        cin >> error;
        button[error] = false;
    }

    // ์—ฐ์‚ฐ
    int temp, digit, ans=500000; bool able;
    for(int i=0; i<=1000000; i++) {  // ๋ถ€๋ฃจํŠธํฌ์Šค ์™„์ „ํƒ์ƒ‰
        temp = i;
        able = true; // ๋ง๊ฐ€์ง€์ง€ ์•Š์€ ๋ฒ„ํŠผ์œผ๋กœ i๋ฅผ ๋ˆ„๋ฅผ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
        digit = 0; // i์˜ ์ž๋ฆฟ์ˆ˜

        while(temp>0){
            digit++;
            if(!button[temp%10]) {
                able = false;
                break;
            }
            temp /= 10;
        }
        if(i==100) {
            able = true;
            digit = 0;
        } else if(i==0) {
            able = button[0];
            digit++; // 0์˜ ์ž๋ฆฌ์ˆ˜๊ฐ€ 1์ธ๊ฑฐ ํ‘œํ˜„
        }

        if(able) {
            ans = min(abs(i-n)+digit, ans);
        }
    }
    
    // ์ถœ๋ ฅ
    cout << ans;
    
    return 0;
}

/*
 */

 

๋”๋ณด๊ธฐ
// Authored by : seondal
// Co-authored by : -

// #include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;

vector<bool> button;

int digit(int channel) {
    if(channel==100)
        return 0;

    if(channel==0) {
        if(!button[0])
            return -1;
        return 1;
    }
    
    int cnt = 0;
    while(channel>0){
        cnt++;
        if(!button[channel%10])
            return -1;
        channel /= 10;
    }
    return cnt;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    
    // ์ž…๋ ฅ
    int n, m, error;
    cin >> n >> m;
    button.assign(m, true);
    for(int i=0; i<m; i++) {
        cin >> error;
        button[error] = false;
    }

    // ์—ฐ์‚ฐ
    int diff = abs(n-100);
    for(int i=n; i<=n+100; i++) {
        if(digit(i) != -1)
            diff = min(digit(i)+i-n, diff);
    }
    for(int i=n; i>=0; i--) {
        if(digit(i) != -1)
            diff = min(digit(i)+n-i, diff);
    }
    
    // ์ถœ๋ ฅ
    cout << diff;
    
    return 0;
}

/*
 */
๋ฐ˜์‘ํ˜•