
문제 설명
게임 맵에서 상대팀 진영에 도착하기 위해 지나가는 칸의 최솟값을 return
https://school.programmers.co.kr/learn/courses/30/lessons/1844
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이법
최단 거리를 찾는 문제이므로 BFS를 통해서 문제를 풀었다
visited에는 방문했는지 여부를 체크하였고, arr는 지나온 칸의 수를 저장하였다
만일 마지막 지점인 arr[n - 1][m - 1]의 값이 0이라면 지나갈 수 없는 것이므로 -1를 리턴해주었다
소스 코드
#include <vector>
#include <queue>
using namespace std;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, 1, -1};
int solution(vector<vector<int>> maps)
{
int visited[101][101] = { 0 };
int arr[101][101] = { 0 };
int n = maps.size();
int m = maps[0].size();
queue<pair<int, int>> q;
q.push({0, 0});
visited[0][0] = 1;
arr[0][0] = 1;
while (!q.empty()) {
int y = q.front().first;
int x = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int ny = y + dy[i];
int nx = x + dx[i];
if (nx < 0 || nx >= m || ny < 0 || ny >= n ||
visited[ny][nx] == 1 || maps[ny][nx] == 0)
continue;
q.push({ny, nx});
visited[ny][nx] = 1;
arr[ny][nx] = arr[y][x] + 1;
}
}
if (arr[n - 1][m - 1] == 0)
return -1;
return arr[n - 1][m - 1];
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 2단계 - 의상 (0) | 2024.02.03 |
---|---|
[프로그래머스] 2단계 - 2 x n 타일링 (0) | 2024.02.02 |
[프로그래머스] 2단계 - 행렬의 곱셈 (0) | 2024.02.02 |
[프로그래머스] 3단계 - 정수 삼각형 (0) | 2024.02.01 |
[프로그래머스] 2단계 - 프로세스 (0) | 2024.01.30 |