| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- c++
- dp
- dfs
- 동적계획법
- 그리디
- 코틀린
- 구현
- 2018 KAKAO BLIND RECRUITMENT
- 통신 인터페이스
- kotlin
- 임베디드
- C
- Stack
- 컴퓨터비전
- level3
- 다이나믹 프로그래밍
- java
- 백준
- BFS
- 컴퓨터 비전
- JavaScript
- level2
- 다이나믹프로그래밍
- 프로그래머스
- 우선순위큐
- cpp
- lv2
- 자바
- 이분탐색
- 누적합
Archives
- Today
- Total
코드를 느껴바라
14940번 : 쉬운 최단거리 [C++] 본문
문제 링크
성공 여부(걸린 시간): 성공(27분)
아이디어
도착지는 2로 표시되어있고 하나이다.
그리고 구해야 하는 것은 해당 도착지까지 도달하는 데에 최단거리
*다르게 말하면 *
도착지에서 각 각의 위치까지 도달하는데 걸리는 거리를 구하면 된다.
그렇게 하면 한번의 BFS로도 정답을 구할 수 있다.
BFS를 돌때는 해당 배열에 대한 visited배열의 값이 지금 방문이 더 가까운지에 대해서 검사하고
그렇다면 갱신 아니라면 그냥 continue
근데 문제를 제대로 안읽어서
만약에 못도착하는 곳인데 원래 못도착하는 곳이면(장애물이 있는 곳) 0
그것이 아니면 -1로 표시를 해뒀어야 했는데 그걸 안해줘서 시간을 끌었다...
풀이 코드
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
static int N, M;
bool canGo(int x, int y) {
return x < N && y < M && x >= 0 && y >= 0;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> N >> M;
vector<vector<int>> map(N, vector<int>(M, 0));
vector<vector<int>> visited(N, vector<int>(M, 0xFFFFFF));
pair<int, int> start;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
if (map[i][j] == 2) {
start = { i, j };
}
}
}
queue<pair<int, int>> q;
q.push(start);
visited[start.first][start.second] = 0;
int dx[] = { 1, 0, -1, 0 };
int dy[] = { 0, 1, 0, -1 };
while (!q.empty()) {
pair<int, int> cur = q.front();
q.pop();
int x = cur.first;
int y = cur.second;
for (int dir = 0; dir < 4; dir++) {
int mx = dx[dir] + x;
int my = dy[dir] + y;
if (canGo(mx, my) && map[mx][my] == 1 && visited[x][y] + 1 < visited[mx][my]) {
q.push({ mx, my });
visited[mx][my] = visited[x][y] + 1;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
int result = visited[i][j] == 0xFFFFFF ? map[i][j]==0?0:-1 : visited[i][j];
cout << result;
if (j != M - 1) {
cout << " ";
}
}
if (i != N - 1) {
cout << "\n";
}
}
return 0;
}반응형
'PS > 백준(Baekjoon)' 카테고리의 다른 글
| 2302번 : 극장 좌석 [C++] (0) | 2025.12.26 |
|---|---|
| 9461번 : 파도반 수 [C++] (0) | 2025.12.26 |
| 2644번 : 촌수계산 [C++] (0) | 2025.12.24 |
| 1417번 : 국회의원 선거 [C++] (0) | 2025.12.24 |
| 15591번 : MooTube (Silver) [C++] (0) | 2025.12.23 |
