반응형
출처
https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
마지막에 도착지점은 3이 들어와야 하므로 que의 push조건을 잘 설정 해야한다.
문제 푸는 요령 컴파일 완료 -> 테케 넣고 -> 틀렸으면 로그 삽입. -> 틀린 부분 바로잡기.
#include<iostream>
#include<queue>
using namespace std;
string arr[16];
bool visit[16][16];
int main(void)
{
for(int i = 0; i<10; i++)
{
int N;
cin >> N;
bool check = false;
for(int j = 0; j < 16; j++)
{
cin >> arr[j];
for(int k = 0; k < 16; k++)
{
visit[j][k] = false;
}
}
queue< pair<int, int> > que;
que.push({1,1});
visit[1][1] = true;
while(!que.empty())
{
int y = que.front().first;
int x = que.front().second;
que.pop();
if(arr[y][x] == '3')
{
cout<<"#"<<N<<" "<<1<<endl;
check = true;
break;
}
if(x+1 < 16 && y < 16 && x >= 0 && y >= 0 )
{
if(!visit[y][x+1] && (arr[y][x+1] == '0' || arr[y][x+1] == '3'))
{
que.push({y,x+1});
visit[y][x+1] = true;
}
}
if(x-1 < 16 && y < 16 && x-1 >= 0 && y >= 0 )
{
if(!visit[y][x-1] && (arr[y][x-1] == '0' || arr[y][x-1] == '3'))
{
que.push({y,x-1});
visit[y][x-1] = true;
}
}
if(x < 16 && y+1 < 16 && x >= 0 && y >= 0 )
{
if(!visit[y+1][x] && (arr[y+1][x] == '0' || arr[y+1][x] == '3'))
{
que.push({y+1,x});
visit[y+1][x] = true;
}
}
if(x < 16 && y-1 < 16 && x >= 0 && y-1 >= 0 )
{
if(!visit[y-1][x] && (arr[y-1][x] == '0' || arr[y-1][x] == '3'))
{
que.push({y-1,x});
visit[y-1][x] = true;
}
}
}
if(!check)
{
cout<<"#"<<N<<" "<<0<<endl;
}
}
}
반응형
'Algorithm' 카테고리의 다른 글
2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2019.12.17 |
---|---|
8998. 세운이는 내일 할거야 (0) | 2019.12.16 |
1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (0) | 2019.12.14 |
1206. [S/W 문제해결 기본] 1일차 - View (0) | 2019.12.13 |
백준 5525번 IOIOI (0) | 2019.11.18 |