이 문제의 경우 내가 본 코테에서 나온 문제를 임의로 각색한 문제이다. 충분히 풀 수 있는 문제였으나 배가 고파서 못풀었지만 생각하니까 매우 쉬운 문제였다.. 이래서 아침밥이 중요한가 보다.
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
int arr[1001][1001];
bool visited[1001][1001];
int main() {
int N;
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> arr[i][j];
}
}
int hp=100;
int maxhp = 100;
int startX, startY;
stack<pair<int, int>> bfss;
cin >> startX >> startY;
bfss.push(make_pair(startX, startY));
while (!bfss.empty()) {
startX = bfss.top().first;
startY = bfss.top().second;
visited[startX][startY] = true;
if (arr[startX][startY] == 1) {
}
else if (arr[startX][startY == 2]) {
hp -= 20;
if (hp <= 0) {
break;
}
}
else if (arr[startX][startY] == 3) {
hp += 30;
arr[startX][startY] = 1;
}
if (startX + 1 < N && !visited[startX + 1][startY]&&arr[startX+1][startY]!=0) {
bfss.push(make_pair(startX + 1, startY));
}
else if (startX - 1 >= 0 && !visited[startX - 1][startY]&& arr[startX - 1][startY]!=0) {
bfss.push(make_pair(startX - 1, startY));
}
else if (startY - 1 >= 0 && !visited[startX][startY - 1]&& arr[startX][startY - 1]!=0) {
bfss.push(make_pair(startX, startY - 1));
}
else if (startY + 1 < N && !visited[startX][startY + 1]&& arr[startX][startY + 1]!=0) {
bfss.push(make_pair(startX, startY + 1));
}
else {
bfss.pop();
}
}
cout << hp;
}
문제: 플레이어는 N x N 던전 안에 있다 이때 플레이어는 자신이 갈 수 있는 모든 곳을 탐험 해야 한다. 이 던전에는 몬스터방 물약방 일반방이 있으며 몬스터방에 들어갔을 시 몬스터는 잡지 못하고 플레이어의 피가 20 감소한다 물약방에 들어가면 그 방은 일반 방으로 바뀌고 플레이어의 피가 30이 증가한다. 플레이어가 던전을 모두 돌고 나서의 플레이어의 HP를 출력하라. 플레이어의 HP가 0일시 즉시 탐험을 종료하고 0을 출력한다.
출력 예시:
3
1 3 1
0 2 0
0 2 0
0 0
정답:40