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 |
Tags
- 5강클로저
- 2023카카오블라인드코테
- JS스터디
- 비트마스크
- 이중지도
- Lv3
- c++
- Lv2
- 프로그래머스
- div2개
- pccp기출문제
- solved.ac골드
- 알고리즘문제풀이
- 알고리즘 문제풀이
- 최소스패닝트리
- JS
- React.StrictMode
- 스택
- 타겟넘버
- 정렬
- 과제진행하기
- [pccp 기출문제]
- 우박수열정적분
- DP
- 백준 알고리즘
- 백준알고리즘
- solved.ac플래티넘
- 지도 여러개
- 두원사이의정수쌍
- 코어자바스크립트
Archives
- Today
- Total
호지
[프로그래머스] 미로 탈출 문제 풀이 c++ 본문
BFS문제의 변형이다.
시작지점에서 레버까지의 BFS로 최소거리를 구하고, 레버에서 출구까지 BFS로 최소거리를 구하면 된다
우선 maps를 전체 탐색하여 시작지점과 출구의 위치를 구한다.
큐를 2개 쓰거나, 반복문을 새로 시작하는 방법도 있었지만 반복문 하나에서 큐1개로 해결하기 위해 ck라는 변수를 활용했다.
S->L로 가는 동안 visit체크는 maps에 V를 표시하고 L에 도달하면 ck를 W로 바꿔서 W로 visit 체크를 한다.
L에 도달하기 전에 E에 먼저 도달한 경우는 L을 만나서 ck가 W로 바꿔야 레버를 먼저 동작시킨 것이므로 ck가 W일때만 출구에 도달한 것이 된다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
struct Pos{
int x;
int y;
int cnt;
Pos(int a, int b, int c){
x = a; y = b; cnt = c;
}
};
int solution(vector<string> maps) {
Pos start(0,0,0), end(0,0,0);
for(int i=0; i<maps.size(); i++){
for(int j=0; j<maps[0].size(); j++){
if(maps[i][j] == 'S'){
start.x = i; start.y = j;
}
else if(maps[i][j] == 'E'){
end.x = i; end.y = j;
}
}
}
queue<Pos> q;
q.push(start);
int moves[4][2] = {{0,1}, {1,0}, {-1,0}, {0,-1}};
char ck = 'V';
while(!q.empty()){
int x = q.front().x;
int y = q.front().y;
int cnt = q.front().cnt;
for(int i=0; i<4; i++){
int nx = x + moves[i][0];
int ny = y + moves[i][1];
int ncnt = cnt + 1;
if(nx>=0 && nx<maps.size() && ny>=0 && ny<maps[i].size() && maps[nx][ny] != 'X' && maps[nx][ny] != ck){
if(maps[nx][ny] == 'L'){
while(!q.empty()) q.pop();
q.push(Pos(x,y,cnt));
q.push(Pos(nx,ny,ncnt));
ck = 'W';
maps[nx][ny] = ck;
break;
}
else if(nx == end.x && ny == end.y && ck =='W'){
return ncnt;
}
else{
q.push(Pos(nx,ny,ncnt));
maps[nx][ny] = ck;
}
}
}
q.pop();
}
return -1;
}
https://school.programmers.co.kr/learn/courses/30/lessons/159993
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 추억 점수 문제풀이 JS (0) | 2023.07.19 |
---|---|
[프로그래머스] 달리기 경주 문제풀이 JS (0) | 2023.07.19 |
[프로그래머스] 혼자서 하는 틱택토 c++ (0) | 2023.05.04 |
[프로그래머스] 미로 탈출 명령어 c++ (0) | 2023.04.14 |
[프로그래머스] 표 병합 c++ (0) | 2023.04.06 |
Comments