티스토리 뷰
반응형
https://www.acmicpc.net/problem/16174
16174번: 점프왕 쩰리 (Large)
쩰리는 맨 왼쪽 위의 칸에서 출발해 (행, 열)로 나타낸 좌표계로, (1, 1) -> (2, 1) -> (3, 1) -> (3, 3)으로 이동해 게임에서 승리할 수 있다.
www.acmicpc.net
- 문제 해결 방법
단순한 너비 우선 탐색(BFS) 문제입니다.
오른쪽과 아래로만 이동할 수 있다는 것과 한 번에 이동할 수 있는 칸의 수는 현재 밟고 있는 칸에 쓰여 있는 수라는 것만 잘 처리해 주면 주면 됩니다.
- C++ 전체 코드
#include<bits/stdc++.h>
#define xx first
#define yy second
using namespace std;
using pii = pair<int,int>;
int N;
int m[65][65]{};
bool vi[65][65]{};
int dy[2] = {0,1}; // 오른쪽, 아래
int dx[2] = {1,0}; // 오른쪽, 아래
bool solve(){
queue<pii> q;
q.push({0,0});
vi[0][0] = true;
while(!q.empty()){
int cy = q.front().xx;
int cx = q.front().yy;
int cd = m[cy][cx]; // 현재 밟고 있는 칸에 쓰여 있는 수
q.pop();
if(cd == -1) return true;
for(int i=0; i<2; i++){
int ny = cy + cd*dy[i];
int nx = cx + cd*dx[i];
if(ny<0 || nx<0 || ny>=N || nx>=N || vi[ny][nx]) continue;
q.push({ny,nx});
vi[ny][nx] = true;
}
}
return false;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>N;
for(int i=0; i<N; i++){
for(int j=0; j<N; j++){
cin>>m[i][j];
}
}
if(solve()) cout<<"HaruHaru";
else cout<<"Hing";
}
반응형
'알고리즘 공부 > 문제풀이' 카테고리의 다른 글
백준 14891번 - 톱니바퀴 (0) | 2021.05.20 |
---|---|
백준 21277번 - 짠돌이 호석 (0) | 2021.05.18 |
백준 5397번 - 키로커 (0) | 2021.05.18 |
백준 15806번 - 영우의 기숙사 청소 (0) | 2021.05.18 |
백준 20549번 - 인덕이의 고민 (0) | 2021.05.16 |
댓글