어흥
[백준 4485] 녹색 옷 입은 애가 젤다지? (C++) 본문
728x90
반응형
문제 링크: https://www.acmicpc.net/problem/4485
4485번: 녹색 옷 입은 애가 젤다지?
문제 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주인공, 링크는 지금 도둑루피만 가득한 N x N 크기의 동굴의 제일 왼쪽 위에 있다. [0][0]번 칸이기도 하다. 왜 이런 곳에 들어왔냐고 묻는다면 밖에서 사람들이 자꾸 "젤다의 전설에 나오는 녹색 애가 젤다지?"라고 물어봤기 때문이다. 링크가 녹색 옷을 입
www.acmicpc.net
1. 주의할 점
- 이미 방문했거나, 해당 지점에 도착할때까지 소비한 루피가 많은 경우 방문하지 않는다
- 매 테스트케이스마다 초기화를 진행한다
2. 구현
- 다익스트라 알고리즘을 통해서 구현하며, 초기 위치는 (0,0)이다
- 우선순위큐를 통해 현재까지 소모한 루피가 가장 적은 값이 Top에 올라오도록 설정한다
- 현재 좌표가 (Num-1,Num-1)인 경우 종료와 함께 답을 출력한다.
#define MAX 987654321
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct info {
int x, y, val;
};
struct cmp {
bool operator()(info &a, info &b) {
return a.val > b.val;
}
};
info tmp;
int num;
int arr[125][125];
bool check[125][125];
int dist[125][125];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { -1,0,1,0 };
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int result;
for(int k=1;;k++) {
cin >> num;
if (num == 0) break;
result = 0;
for (int i = 0; i < num; i++)
for (int j = 0; j < num; j++) {
cin >> arr[i][j];
check[i][j] = false;
dist[i][j] = MAX;
}
priority_queue<info, vector<info>, cmp> pq;
tmp.x = 0;
tmp.y = 0;
tmp.val = arr[0][0];
pq.push(tmp);
dist[0][0] = arr[0][0];
while (!pq.empty()) {
int cx = pq.top().x;
int cy = pq.top().y;
int cv = pq.top().val;
pq.pop();
if (cy == num - 1 && cx == num - 1) {
result = cv;
break;
}
if (check[cy][cx]) continue;
check[cy][cx] = true;
for (int i = 0; i < 4; i++) {
int nx = cx + dx[i];
int ny = cy + dy[i];
if (nx >= 0 && ny >= 0 && nx < num && ny < num && !check[ny][nx]) {
if (dist[ny][nx] > cv + arr[ny][nx]) {
dist[ny][nx] = cv + arr[ny][nx];
tmp.x = nx;
tmp.y = ny;
tmp.val = dist[ny][nx];
pq.push(tmp);
}
}
}
}
cout << "Problem "<<k<<": "<<result << '\n';
}
system("pause");
return 0;
}
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 11401] 이항 계수 3 (C++) (0) | 2020.04.02 |
---|---|
[백준 6087] 레이저 통신 (C++) (0) | 2020.04.01 |
[백준 17090] 미로 탈출하기 (C++) (0) | 2020.03.31 |
[백준 11779] 최소비용 구하기 2 (C++) (0) | 2020.03.30 |
[백준 1916] 최소비용 구하기 (C++) (0) | 2020.03.30 |
Comments