티스토리 뷰

반응형

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";
}
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함