Notice
Recent Posts
Recent Comments
Link
할껀하고놀자
[백준] 17143번 낚시왕 본문
728x90
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int Max = 100 + 1;
// 문제에서 상하우좌로 주어진다.
int dy[4] = { -1,1,0,0 };
int dx[] = { 0,0,1,-1 };
int R, C, M;
int arr[Max][Max];
// 크기 속도 방향
vector<pair<int, pair<int, int>>> shark[Max][Max];
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> R >> C >> M;
for (int i = 0; i < M; i++) {
int r, c, s, d, z;
cin >> r >> c >> s >> d >> z;
shark[r][c].push_back({ z, {s,d - 1} });
}
int cur = 0;
int result = 0;
for (int c = 0; c < C; c++) {
cur++;
// 땅에서 가장 가까운 상어를 먹는다
for (int i = 1; i <= R; i++) {
if (shark[i][cur].size()) { // 상어가 존재한다면
result += shark[i][cur][0].first; // 상어 크기를 결과값에 더해준다.
shark[i][cur].clear();
break;
}
}
//r,c,z,s,d
queue<pair<pair<int, int>, pair<int, pair<int, int>>>>q;
for (int i = 1; i <= R; i++) {
for (int j = 1; j <= C; j++) {
if (shark[i][j].size()) {
q.push({ {i,j},{shark[i][j][0]} });
shark[i][j].clear();
// 상어가 존재하면 큐에 넣고 공간 비워주기...
}
}
}
while (!q.empty()) {
int y = q.front().first.first;
int x = q.front().first.second;
int size = q.front().second.first;
int speed = q.front().second.second.first;
int dir = q.front().second.second.second;
q.pop();
for (int i = 0; i < speed; i++) {
// 위 아래 0 1
if (dir == 0 || dir == 1) {
int next = y + dy[dir];
if (!(1 <= next && next <= R)) {
dir = 1 - dir;
// 방향 전환하는 방법인가봄..
}
y += dy[dir];
}
else {
// 좌 우 2 3
int next = x + dx[dir];
if (!(1 <= next && next <= C)) {
dir = 5 - dir;
}
x += dx[dir];
}
}
// 이미 해당 칸에 상어가 존재할 경우에
if (shark[y][x].size()) {
// 해당 칸에 있는 상어의 크기보다 자기가 더 클 경우에만 대체한다.
if (shark[y][x][0].first < size) {
shark[y][x].clear();
shark[y][x].push_back({ size,{speed,dir} });
}
}
else {
// 없으면 그냥 넣는다.
shark[y][x].push_back({ size,{speed,dir} });
}
}
}
cout << result << endl;
return 0;
}
'[IT] > 백준' 카테고리의 다른 글
[백준] 1786번 찾기 (KMP 알고리즘) (0) | 2019.09.09 |
---|---|
[백준] 9012번 괄호 (0) | 2019.08.14 |
[백준] 11365번 !밀비 급일 (0) | 2019.06.10 |
[백준] 10773번 제로 (0) | 2019.06.10 |
[백준] 2164번 카드2 (0) | 2019.06.10 |
Comments