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
- 이것이코딩테스트다
- c++
- 코테
- 알고리즘
- dfs
- Typescript
- 이진탐색
- 코딩테스트
- 앱개발
- 빅데이터분석
- SQL
- 최단경로
- 이코테
- 타입스크립트
- TS
- bfs
- BOJ
- DP
- 개발자북클럽
- 정렬
- react-native
- 프로그래머스
- 그리디
- 다이나믹프로그래밍
- 백준
- 코딩일기
- 구현
- ps
- 노마드코더
- 백준온라인저지
Archives
- Today
- Total
한량처럼 살고 싶다
[이것이 코딩테스트다]미로 탈출(C++) 본문
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=247882118
이것이 취업을 위한 코딩 테스트다 with 파이썬
IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부터 2020년까지의 코딩 테스트와 알고리즘 대회의 기출문제를 엄선하여 수록하였다. 최근 5년간의 코딩 테스트 기출문제
www.aladin.co.kr
해당 도서의 DFS/BFS 단원의 실전문제 4번 '미로 탈출'을 풀이한다.
01. 이 문제는 DFS가 아니라 왜 BFS로 풀었을까?
시작지점에서 가장 가까운 노드부터 탐색하므로, 최종 도착지까지 가장 가까운 노드만을 타고 들어가게 된다.
따라서 결과에 최단거리가 나오게 된다.
02. 풀이
문제 조건
- 괴물이 있는 곳은 0, 없는 곳은 1이다.
- 동빈이의 위치는 (1,1) 이고 미로의 출구는 (N,M)이다.
- 동빈이가 움직여야 하는 최소의 칸 개수를 구하세요.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int N, M;
int** map;
queue<pair<int, int>> q;
int direction[4][2] = {
{-1,0},
{1,0},
{0,-1},
{0,1}
};
void input() {
scanf("%d %d", &N, &M);
map = new int* [N];
for (int i = 0; i < N; i++) map[i] = new int[M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) scanf("%d", &map[i][j]);
}
}
void solution() {
q.push(make_pair(0, 0));
while (!q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 4; i++) {
int dx = x + direction[i][0];
int dy = y + direction[i][1];
if (dx < 0 || dx >= N || dy < 0 || dy >= M) continue;
if (map[dx][dy] == 0) continue;
if (map[dx][dy] == 1) {
map[dx][dy] = map[x][y] + 1;
q.push(make_pair(dx, dy));
}
}
}
printf("%d", map[N - 1][M - 1]);
}
int main(void) {
input();
solution();
}
도출 방법
-> BFS로 주변 칸을 탐색하면서, 갈 수 있는 곳이면 현재 위치의 숫자에 1을 더해준다.
-> 갔을 경우 pop, 가지 못하는 곳은 처음부터 큐에 넣지 않는다.
'PS > 이코테' 카테고리의 다른 글
[이것이 코딩테스트다]성적이 낮은 순서로 학생 출력하기(C++) (0) | 2023.02.03 |
---|---|
[이것이 코딩테스트다]위에서 아래로(C++) (0) | 2023.02.03 |
[이것이 코딩테스트다]음료수 얼려 먹기(C++) (0) | 2023.02.02 |
[이것이 코딩테스트다]게임 개발(C++) (2) | 2023.01.17 |
[이것이 코딩테스트다]왕실의 나이트(C++) (0) | 2023.01.05 |