Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- @environmentobject 프로퍼티 래퍼
- modal 관리
- 비동기함수
- react hook
- 세로모드끄기
- react-router-dom
- zustand
- @observedobject 프로퍼티 래퍼
- LazyVGrid
- 블로그업로드확인
- react fsd
- 동기 함수 내에서 비동기 함수 호출
- 컴퓨터네트워크
- GridItem
- react상태관리라이브러리
- 리액트최적화
- featured-sliced-design
- zustand란
- C++
- 리렌더링최적화
- 반응형 css
- CSS
- LazyHGrid
- 페이지전환
- @published 프로퍼티 래퍼
- BFS
- navigationBar 숨기기
- react modal
- 페이지이동함수
- 가로모드끄기
Archives
- Today
- Total
leebaek
[BOJ/16928번뱀과사다리게임] c++ / BFS 본문
문제
1번칸에서 100번칸으로 가는데 굴려야 하는 최소 주사위의 수
-뱀이 있는 칸은 y칸으로 내려감
-사다리가 있는 칸은 v칸으로 올라감
-주사위는 +1~6칸 올라갈 수 있음
생각
board맵에는 y, v 값을 넣어주고, vis칸에 사다리인지 뱀인지 표시하면 되겠다 생각함
문제풀이
1.board맵에 사다리와 뱀의 이동 칸을 저장하고, vis에 사다리는 1을 뱀은 2를 저장함
2.1번칸에서 BFS 탐색함
2-1.주사위 1~6 나올 수 있는 경우를 확인
3..만약 nx+i 가 범위를 벗어나지 않는다면
3-1.사다리 칸이라면, 큐에 푸쉬(board[nx+i], cnt+1) + 방문표시 - 올라감
3-2.뱀 칸이라면, 큐에 푸쉬(board[nx+i], cnt+1) + 방문표시 - 내려감
3-3.아무것도 없는 칸이라면 큐에 푸쉬(nx+i, cnt+1) + 방문표시 - 주사위 수만큼 올라감
4.100번째 칸에 도달하면 cnt 반환
5.cnt 출력
코드
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
#define X first
#define Y second
int board[101];
int vis[101];
int N, M, u, v, x, y;
int BFS() {
queue<pair<int, int>> Q;
Q.push({1, 0});
while(!Q.empty()) {
int nx = Q.front().X;
int cnt = Q.front().Y;
Q.pop();
if ( nx == 100 )
return cnt;
for ( int i = 6; i >= 1; i-- ) {
if ( vis[nx+i] == 0 ) continue;
if ( nx+i > 100 ) continue;
if ( vis[nx+i] == 1 ) { // 사다리
vis[nx+i] = 0;
Q.push({board[nx+i], cnt+1});
}
else if ( vis[nx+i] == 2 ) { // 뱀
vis[nx+i] = 0;
Q.push({board[nx+i], cnt+1});
}
else {
vis[nx+i] = 0;
Q.push({nx+i, cnt+1});
}
}
}
return -1;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
memset(vis, -1, sizeof(vis));
for ( int i = 0; i < N; i++ ) { // 사다리 정보
cin >> x >> y;
board[x] = y;
vis[x] = 1;
}
for ( int i = 0; i < M; i++ ) { // 뱀 정보
cin >> u >> v;
board[u] = v;
vis[u] = 2;
}
cout << BFS();
}
'BOJ_C++_PS' 카테고리의 다른 글
[BOJ/2665번미로만들기] c++ / BFS (1) | 2023.10.18 |
---|---|
[BOJ/2512번예산] c++ / 이진탐색 (0) | 2023.10.17 |
[BOJ/2589번보물섬] c++ / BFS (0) | 2023.10.15 |
[BOJ/13549번숨바꼭질3] c++ / BFS (1) | 2023.10.14 |
[BOJ/14940번쉬운최단거리] c++ / BFS (0) | 2023.10.13 |