๐ก์ฒซ๋ฒ์งธ ์์ด๋์ด
์ผ๋จ ๋ณด์๋ง์ 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ํด์ค์ ๋์ ์์คํ ์ด๋ก ์๋๋ฅผ ํ๋ ๋ ์ฌ์ด์ค ์ ์์๋ค.
๋์ ์๋ง์ ๋์ ๋ค
์ค๊ฐ ์ค๊ฐ ๊ณ ์ณ๋ ํ์ ๊น๋ํด ๋ณด์ด์ง ์์ง๋ง ์ ๋ต์ด ๋ฌ ์ฝ๋์ด๋ค.
#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();
}
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 1790๋ฒ ์ ์ด์ด ์ฐ๊ธฐ 2 (0) | 2022.07.11 |
---|---|
[๋ฐฑ์ค/C++] 16936๋ฒ ๋3๊ณฑ2 (0) | 2022.07.10 |
[๋ฐฑ์ค/C++] 25212๋ฒ ์กฐ๊ฐ ์ผ์ดํฌ (0) | 2022.07.03 |
[๋ฐฑ์ค/C++] 25214๋ฒ ํฌ๋ฆผ ํ์คํ (0) | 2022.07.01 |
[๋ฐฑ์ค/C++] 25215๋ฒ ํ์ดํ (0) | 2022.06.29 |