티스토리 뷰
문제
알고리즘
BFS
풀이
격자판마다 양수가 쓰여있습니다. 양수를 V라고 가정할 때, r X c = V 에 해당하는 (r, c)로 이동이 가능합니다. (1, 1)에서 시작하여 (M, N)으로 이동 가능한지 판별하는 문제입니다.
(1,1)에서 BFS를 수행하려면 조금 까다롭습니다. 가능한 (r, c)를 조사를 해야하는데 이 과정이 시간이 걸립니다. 역으로 (M, N)에서 (1,1)로 이동하면 비교적 간단해집니다. V값을 담고 있는 좌표들을 조사하는 방법으로 수행하면 되기 때문입니다. V마다 좌표를 담기 위해 2차원 배열을 사용했고 BFS를 수행해 나가면 됩니다.
코드
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n) for (int i = 1; i <= n; ++i)
using namespace std;
typedef pair<int, int> pii;
int N, M;
vector<pii> vt[1000001];
bool visited[1005][1005];
int main() {
#ifndef ONLINE_JUDGE
freopen("in", "r", stdin);
freopen("out", "w", stdout);
#endif
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
cin >> N >> M;
rep(i, N) rep(j, M) {
int x;
cin >> x;
vt[x].emplace_back(i + 1, j + 1);
}
queue<int> q;
q.emplace(N * M);
visited[N][M] = true;
while (!q.empty()) {
int v = q.front();
q.pop();
for (auto [x, y] : vt[v]) {
if (x == 1 && y == 1) {
cout << "yes";
exit(0);
}
if (visited[x][y])
continue;
visited[x][y] = true;
q.emplace(x * y);
}
}
cout << "no";
return 0;
}
'Algorithm' 카테고리의 다른 글
[백준 14450] Hoof, Paper, Scissors (Gold) (0) | 2021.02.18 |
---|---|
[백준 14169] Lasers and Mirrors (0) | 2021.02.14 |
[백준 2487] 섞기 수열 (0) | 2021.02.11 |
[백준 14168] Cow Checklist (0) | 2021.02.11 |
[백준 8875] 장난감 정리 로봇 (0) | 2021.02.10 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Oracle
- string
- hld
- SCC
- 동적계획법
- knapsack
- Segment tree
- dfs
- 좌표압축
- 펜윅트리
- bfs
- 2-SAT
- 스위핑
- sweeping
- kmp
- implementation
- Fenwick
- spring
- 세그먼트트리
- spring boot
- 정렬
- Suffix Array
- 트라이
- dijkstra
- DP
- 이분탐색
- sorting
- 이분매칭
- greedy
- union find
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함