티스토리 뷰
문제 링크
문제 요약
- 첫째 줄에는 보물 지도의 세로의 크기와 가로의 크기가 빈칸을 사이에 두고 주어진다.
- 이어 L과 W로 표시된 보물 지도가 아래의 예와 같이 주어지며, 각 문자 사이에는 빈 칸이 없다.
- 보물 지도의 가로, 세로의 크기는 각각 50이하이다.
- 첫째 줄에 보물이 묻혀 있는 두 곳 사이를 최단 거리로 이동하는 시간을 출력한다.
BFS
- 큐에 있는 모든 좌표 (x,y)를 다음과 같은 조건을 만족하는지 체크해준다.
- arr 범위 밖이라면 continue
- 방문했던 좌표라면 continue
- 'W'라면 continue
- 현재 좌표에서 동 서 남 북 좌표가 위의 세 가지 조건에 비교한 뒤, 큐에 넣어주고 depth를 1 더해준다.
- 위의 루틴을 큐가 빌 때까지(empty) 실행한 뒤 depth를 리턴해준다.
문제 해답
#include <iostream>
#include <memory.h>
#include <queue>
using namespace std;
const int MAX = 50 + 1;
const int MOVE = 4;
int M, N;
int mvX[MOVE] = { 1,-1,0,0 };
int mvY[MOVE] = { 0,0,1,-1 };
char arr[MAX][MAX];
int max(int a, int b);
int bfs(int i, int j);
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int ans = 0;
cin >> N >> M;
for (int i = 0;i < N;i++) {
cin >> arr[i];
}
for (int i = 0;i < N;i++) {
for (int j = 0;j < M;j++) {
if (arr[i][j] == 'L') {
ans = max(ans, bfs(i, j));
}
}
}
cout << ans << endl;
return 0;
}
int bfs(int i, int j) {
int depth = -1;
bool visit[MAX][MAX];
queue <pair<int, int>> q;
memset(visit, 0, sizeof(visit));
q.push({ i, j });
visit[i][j] = true;
while (!q.empty()) {
int qSize = q.size();
for (int idx = 0;idx < qSize;idx++) {
int idxN = q.front().first;
int idxM = q.front().second;
q.pop();
for (int jdx = 0;jdx < MOVE;jdx++) {
int x = idxN + mvX[jdx];
int y = idxM + mvY[jdx];
if (!(0 <= x && x < N && 0 <= y && y < M)) continue;
if (visit[x][y])continue;
if (arr[x][y] == 'W')continue;
q.push(make_pair(x, y));
visit[x][y] = true;
}
}
depth++;
}
return depth;
}
int max(int a, int b) {
return a > b ? a : b;
}
'알고리즘 > Olympiad' 카테고리의 다른 글
[Olympiad] 지역본선 2005 초등부 : 숫자 카드 #2591 (0) | 2019.09.26 |
---|---|
[Olympiad] 지역본선 2005 초등부 : 색종이 #2590 (0) | 2019.09.25 |
[Olympiad] 지역본선 2005 초등부 : 곱셈 #2588 (0) | 2019.09.25 |
[Olympiad] 지역본선 2005 초등부 : 대표값2 #2587 (0) | 2019.09.25 |
[Olympiad] 지역본선 2004 초등부 : 로마 숫자 #2608 (0) | 2019.09.24 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- kkoon9
- 프로그래머스
- 알고리즘
- kotest
- 테라폼
- programmers
- Spring
- Olympiad
- C++
- Java
- Algorithm
- AWS
- 이팩티브 자바
- 디자인 패턴
- Kotlin
- BOJ
- node.js
- JPA
- 객체지향
- 코테
- Spring Boot
- Effective Java
- 백준
- 이펙티브 자바
- MSA
- 클린 아키텍처
- 정규표현식
- BAEKJOON
- 클린 코드
- 디자인패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함