반응형
문제
https://www.acmicpc.net/problem/16235
접근방법
1) 접근 사고
그대로 구현하면 되는 문제였습니다. 저는 봄을 구현하는 과정에서 잘못된 구현으로 시간을 많이 낭비하였습니다. 양분을 먹고 새로 추가해주는 과정에서 새로운 배열에 담은 뒤에 기존 배열을 갱신해야하는데 그렇게 하지 않고 같은 배열에 두고 값을 넣어서 죽은 나무, 갱신 전에 나무의 값이 남아있어서 틀린 답이 나왔습니다. 이 부분을 제외한 계절의 구현은 정확히 구현하였습니다.
2) 시간 복잡도
O(n^2)
3) 배운 점
인구이동문제와 같은 실수를 했다.
4) PS
아니 하;;;
정답 코드
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
#include<bits/stdc++.h>
using namespace std;
const int MAX = 11;
int A[MAX][MAX];
int board[MAX][MAX];
int N, M, K;
using vi = vector<int>;
using vvi = vector<vi>;
int my[] = {-1,-1,-1,0,0,1,1,1};
int mx[] = {-1,0,1,-1,1,-1,0,1};
int main(){
cin >> N >> M >> K;
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++)ㅌ
cin >> A[i][j];
board[i][j] = 5;
}
}
vector<vvi> tree(N, vvi(N));
for(int i =0; i < M; i++){
int y, x, value;
cin >> y >> x >> value;
tree[y-1][x-1].push_back(value);
}
while(K--){
//정렬
for(int i = 0; i< N; i++){
for(int j = 0; j < N; j++){
sort(tree[i][j].begin(), tree[i][j].end());
}
}
//봄
vector<vvi> dT(N, vvi(N));
for(int i = 0; i < N; i++){
for(int j= 0; j < N; j++){
vector<int> tmp;
for(auto &t : tree[i][j]){
if(board[i][j] >= t){
board[i][j] -= t;
tmp.push_back(t + 1);
}
else
dT[i][j].push_back(t);
}
tree[i][j].clear();
for(int cur : tmp)
tree[i][j].push_back(cur);
}
}
//여름
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
for(auto &dt : dT[i][j]){
board[i][j] += dt / 2;
}
}
}
// cout << "braek4" <<"\n";
//가을
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
for(auto &t : tree[i][j]){
if((t % 5) == 0){
for(int d = 0; d < 8; d++){
int ny = i + my[d];
int nx = j + mx[d];
if(ny >= 0 && ny < N && nx >= 0 && nx < N){
tree[ny][nx].push_back(1);
}
}
}
}
}
}
// cout << "braek" <<"\n";
//겨울
for(int i =0; i < N; i++){
for(int j = 0; j< N; j++){
board[i][j] += A[i][j];
}
}
}
int cnt = 0;
for(int i =0; i < N; i++){
for(int j =0; j< N; j++){
for(auto t : tree[i][j])
cnt++;
}
}
cout << cnt <<"\n";
}
|
cs |
반응형
'백준문제풀이 > 구현' 카테고리의 다른 글
17144번-미세먼지 안녕 (0) | 2021.09.14 |
---|---|
16236번-아기상어 (0) | 2021.09.14 |
16234번-인구이동 (0) | 2021.09.13 |
15686번-치킨배달 (0) | 2021.09.08 |
15685번-드래곤커브 (0) | 2021.09.08 |