๋ฐฑ์ค€/C++

[๋ฐฑ์ค€/C++] 15558๋ฒˆ ์ ํ”„ ๊ฒŒ์ž„

yulee_to 2022. 7. 7. 10:29

๋ฐฑ์ค€ ๋กœ๊ณ 
๋ฐฑ์ค€

 

15558๋ฒˆ ์ ํ”„๊ฒŒ์ž„
15558๋ฒˆ ์ ํ”„๊ฒŒ์ž„

 

๐Ÿ’ก์ฒซ๋ฒˆ์งธ ์•„์ด๋””์–ด

์ผ๋‹จ ๋ณด์ž๋งˆ์ž BFS์ž„์„ ์•Œ์•˜๋‹ค! ์ผ๋‹จ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ๋Š” ๋‹ค ๊ฐ€๋ณด๋Š”๋ฐ ์•ˆ๋˜๋ฉด ๋์ธ๊ฑฐ๋‹ˆ๊นŒ

๊ฐ„๋‹จํ•˜๊ฒŒ map์ด๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘๊ฐœ์˜ ์ง€๋„๋ฅผ ํ‘œํ˜„ํ•ด ์ฃผ์—ˆ๊ณ , BFS์˜ ํ์—๋Š” ๋ช‡์ดˆ๊ฐ€ ์ง€๋‚ฌ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” cnt, ํ˜„์žฌ ์ง€๋„์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” idx, ์–ด๋–ค ์ง€๋„์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” map_num์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” pair ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ +1, -1, ๋ฐ˜๋Œ€ํŽธ +k์ด๋ฏ€๋กœ ํ•ด๋‹น ์ง€๋„์˜ ๊ฐ’์ด 1์ด๊ณ , ์‚ฌ๋ผ์ง€์ง€ ์•Š์€ idx์ผ ๊ฒฝ์šฐ์— ํ์— ๋„ฃ์–ด์ฃผ๊ณ  idx๊ฐ€ n๋ณด๋‹ค ์ปค์กŒ์„ ๋•Œ 1์„ ์ถœ๋ ฅํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ํ๊ฐ€ ๋‹ค ๋น„๊ฒŒ ๋˜๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

โŒ์ฒซ๋ฒˆ์งธ ์ œ์ถœ(4%์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค)

์˜ˆ์ œ ์ถœ๋ ฅ์€ ์ž˜ ๋‚˜์™”๋Š”๋ฐ ์ œ์ถœํ•ด๋ณด๋‹ˆ ํ‹€๋ ธ๋‹ค๊ณ  ๋–ด๋‹ค. ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ฝ์–ด๋ณด๋‹ˆ ์ง€๋„์—์„œ ๋จผ์ € ์ด๋™ํ•˜๊ณ  cnt๊ฐ€ ์ปค์ง€๋Š” ๋ฐฉ์‹์ด๋ผ ์ผ๋‹จ cnt++๋ฅผ if๋ฌธ ์•ˆ์— ๋„ฃ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ ค ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์จ๋ณธ ๊ฒฐ๊ณผ +1๊ณผ -1์ด ๊ณ„์† ๋ฐ˜๋ณต๋˜์–ด ํ๊ฐ€ empty๊ฐ€ ๋  ์ˆ˜ ์—†์„๊ฑฐ๋ผ ํŒ๋‹จํ•˜์—ฌ ํ์— front_back์ด๋ผ๊ณ  ํ•ด์„œ +1์ด ๋˜์–ด ํ˜„์žฌ ์œ„์น˜์ธ ๊ฒฝ์šฐ ๋‹ค์Œ์—” -1์„ ํ•˜์ง€ ์•Š๊ฒŒ๋” ํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  map_num์˜ ๊ฐ’์ด 0๊ณผ 1๋งŒ ๋‚˜์™€์•ผ ํ•˜๋Š”๋ฐ %2๋กœ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์–ด ๊ทธ๋ƒฅ if๋ฌธ์œผ๋กœ ์ผ€์ด์Šค๋ฅผ ๋‚˜๋ˆ ์ฃผ์—ˆ๋‹ค. 

 

โŒ๋‘๋ฒˆ์งธ ์ œ์ถœ(4%์—์„œ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค)

์›๋ž˜ cnt๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์–ด์žˆ์—ˆ๋Š”๋ฐ ๋ฐ”๊พธ์—ˆ๊ณ  front_back๋งŒ์œผ๋กœ๋Š” ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋‹ค์‹œ ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ ์กฐ๊ฑด์— N๊ณผ k๊ฐ€ 100000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ์ง€๋„๋ฅผ ๋ฒ—์–ด๋‚ฌ์„ ๋•Œ 1์„ ์ถœ๋ ฅํ•ด์ค˜์•ผ ํ•˜๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ ์ง€๋„์˜ ๋งจ ๋์—์„œ +k๋ฅผ ํ–ˆ์„ ๋•Œ ์ง€๋„๋ฅผ ๋ฒ—์–ด๋‚ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ด์„œ ์•Œ์•„๋‚ธ ๊ธฐ์จ์— ๋ฌด์ž‘์ • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 10๋ฐฐ๋กœ ๋Š˜๋ ค์ฃผ์—ˆ๋‹ค.

 

โŒ์„ธ๋ฒˆ์งธ ์ œ์ถœ(๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ)

๋ฐฐ์—ด์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋Š˜๋ฆฐ ํƒ“์ธ์ง€ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค. ์ด๋ฒˆ์—” ๋งˆ์Œ์„ ๊ฐ€๋‹ค๋“ฌ๊ณ  10๋ฐฐ๊ฐ€ ์•„๋‹ˆ๋ผ 2๋ฐฐ๋กœ๋งŒ ๋Š˜๋ ค์ฃผ์—ˆ๋‹ค.

 

โŒ๋„ค๋ฒˆ์งธ ์ œ์ถœ(๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ)

๊ทธ๋ ‡๊ฒŒ ํ•ด๋„ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค. map[3][200001]์—์„œ ํ•„์š”์—†๋Š” ๋งˆ์ง€๋ง‰ ์ค„์„ ๋นผ์„œ map[2][200001]๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค. 

 

โŒ๋‹ค์„ฏ๋ฒˆ์งธ ์ œ์ถœ(๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ)

์—ญ์‹œ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ ใ… while๋ฌธ์—์„œ ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ๊ฐ€ ๋œจ๋Š”๊ฒŒ ํ™•์‹คํ•œ๊ฑฐ ๊ฐ™์•˜๋‹ค. ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ cnt๊ฐ€ ๊ณ„์† ๋Š˜์–ด๋‚˜์„œ ๊ฒฐ๊ตญ์—” empty๊ฐ€ ๋˜๋ฏ€๋กœ front_back์ด ๊ตณ์ด ํ•„์š”ํ• ๊ฑฐ ๊ฐ™์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จํ•ด์„œ ๋นผ๋ฒ„๋ ธ๋‹ค.

 

โŒ์—ฌ์„ฏ๋ฒˆ์งธ ์ œ์ถœ(๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ)

์ ์  ๋ฉ”๋ชจ๋ฆฌ์ดˆ๊ณผ์— ์ง€์ณ๊ฐ”๋‹ค...๋Œ€์ฒด ๋ญ๊ฐ€ ๋ฌธ์ œ์ง€ ํ–ˆ๋Š”๋ฐ BFS์˜ ๊ทผ๋ณธ visited๊ฐ€ ์—†์—ˆ๋‹ค! ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜๋„ ๋˜๋Š” ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ์ด๋‹ค!!

 

โŒ์ผ๊ณฑ๋ฒˆ์งธ ์ œ์ถœ(ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค)

๋Œ€์ฒด ๋ญ๊ฐ€ ๋ฌธ์ ค๊นŒ๐Ÿ™„ ๋‹ค์Œ๋‚  9์‹œ ๊ทผ๋กœ ์ถœ๊ทผ์ด๋ผ ์ผ์ฐ ์ž๋ ค๊ณ  ํ–ˆ๊ธฐ์— ๋‚ด์ผ ํ’€๊นŒ ํ•˜๋‹ค๊ฐ€ ์ง„์งœ ๋งˆ์ง€๋ง‰์ด๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๋””๋ฒ„๊น…์„ ๋Œ๋ ค๋ดค๋‹ค. ๋””๋ฒ„๊น… ์ƒ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋•Œ ๋‚ด๊ฐ€ ์ฒซ๋ฒˆ์งธ ์ œ์ถœ์—์„œ cnt++์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ค€ ๊ฒƒ์ด ์ƒ๊ฐ๋‚ฌ๋‹ค!! ์ง„์งœ ๋””๋ฒ„๊น… ๋๋‚˜๊ณ  ๋ฐ”๋กœ ์ƒ๊ฐ๋‚จ!!!์•”ํŠผ ์กฐ๊ธ‰ํ•จ์„ ๊ฐ€๋ผ์•‰ํžˆ๊ณ  ๋‹ค์‹œ cnt์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ฒซ ์ œ์ถœ์— ์ œ๋Œ€๋กœ ํ•ด์คฌ๋˜ ๊ฑฐ์˜€๋‹ค. ๊ทธ๋ž˜์„œ ์ฒซ ์ œ์ถœ ๋•Œ์ฒ˜๋Ÿผ cnt++์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋‹ค์‹œ ์ œ์ถœ ใ…Ž

 

โญ•๏ธ์—ฌ๋Ÿ๋ฒˆ์งธ ์ œ์ถœ(๋งž์•˜์Šต๋‹ˆ๋‹ค!!)

์ธ๊ฐ„์Šน๋ฆฌโœŒ๏ธ๋ฌธ์ œ ์ž์ฒด๋Š” ์ฐธ ์‰ฌ์› ๋Š”๋ฐ ๊ตฌํ˜„์—์„œ ์ด๋ ‡๊ฒŒ ๋ฐœ๋ชฉ์ด ์žกํž ์ค„ ๋ชฐ๋ž๋‹ค. BFS DFS ๋ฌธ์ œ๋ฅผ ๋„ˆ๋ฌด ์˜ค๋žœ๋งŒ์— ํ’€์–ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋„ ๋น ๋œจ๋ฆฐ๊ฑฐ ๊ฐ™์•„์„œ ์กฐ๊ธˆ ๋ถ€๋„๋Ÿฌ์› ๋‹ค. ๊ทธ๋ž˜๋„ 12์‹œ ์ „์— ํ’€๊ณ  GitHub์— pushํ•ด์ค˜์„œ ๋‚˜์˜ ์†Œ์ค‘ํ•œ ์ดˆ๋ก ์ž”๋””๋ฅผ ํ•˜๋‚˜ ๋” ์‹ฌ์–ด์ค„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 

 

 

 

๋‚˜์˜ ์ˆ˜๋งŽ์€ ๋„์ „๋“ค

15558๋ฒˆ ์ ํ”„๊ฒŒ์ž„
๋งž์•˜์Šต๋‹ˆ๋‹ค!!

 

์ค‘๊ฐ„ ์ค‘๊ฐ„ ๊ณ ์ณ๋Œ„ ํƒ“์— ๊น”๋”ํ•ด ๋ณด์ด์ง„ ์•Š์ง€๋งŒ ์ •๋‹ต์ด ๋œฌ ์ฝ”๋“œ์ด๋‹ค.

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int n, k;
int map[2][200001];
bool visited[2][200001];
queue<pair<int, pair<int,int>>> q;//{cnt, idx, map1์ธ์ง€ map2์ธ์ง€}


void BFS(){
    while(!q.empty()){
        int cnt = q.front().first;
        int idx = q.front().second.first;
        int map_num = q.front().second.second;
        q.pop();
        if( idx >= n ){
            cout << 1;
            return;
        }
        cnt++;
        if (map[map_num][idx+1] == 1 && (idx+1) >= cnt  && !visited[map_num][idx+1]){
            visited[map_num][idx+1] = true;
            q.push({ cnt, {idx+1, map_num}});
        }
        if( map[map_num][idx-1] == 1 &&(idx-1) >= cnt && !visited[map_num][idx-1]) {
            visited[map_num][idx-1] = true;
            q.push({ cnt, {idx-1, map_num}});
        }
        if(map_num == 0) {
            map_num = 1;
        }
        else map_num = 0;
        if( map[map_num][idx+k] ==1 && idx+k >= cnt&& !visited[map_num][idx+k]) {visited[map_num][idx+k] = true;
            q.push({cnt, {idx+k, map_num}});
        }
    }
    cout << 0;
}

int main (){
    cin.tie(NULL); ios::sync_with_stdio(false);
    cin >> n >> k;
    for(int i=0; i< n+k; i++){
        map[0][i] = 1;
        map[1][i] = 1;
    }
    string str;
    cin >> str;
    for(int i=0; i < n; i ++){
        map[0][i] = str[i]-'0';
    }
    cin >> str;
    for(int i=0; i < n; i ++){
        map[1][i] =str[i] -'0';
    }
    q.push({ 0, {0,0}});
    BFS();

}

 

728x90