Mini
[틀림] 백준 16235 나무제테크 // 구현, 배열에 여러정보필요한경우, 삭제보다는 새로할당 본문
https://www.acmicpc.net/problem/16235
* 풀이
- dp문제인줄알고 괜히쫄았음
- 구현은 추상화를 잘하고 나눠서 각각 구현하는게 답인듯.
- 좌표별로 나무정보가 여러개 필요한문제
- vector<int> arr[14][14]에 각 좌표에 있는 나무들의 나이를 저장
- 죽은 나무를 어떻게 삭제할지
- vector에서 삭제보다
- tmp에 산 나무들 저장후,
- clear후
- 재할당
- 여름에 양분을 어떻게 더해줄지
- 각 좌표에 대해
- 죽을때마다, 더해줄 양분을 계산, die_cnt에 누적
- 끝나고 yangbun[i][j]에 die_cnt만 더해주면됨.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,k; //맵크기, 나무수, k년
int A[14][14]; // 겨울에 줄 양분
int yangbun[14][14]; //현재양분
vector<int> arr[14][14]; //해당좌표에 있는 나무들의 나이!
const int dx[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
const int dy[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
void springSummer() {
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
if(arr[i][j].size()==0) continue;
int die_cnt=0; //더해줄양분 그때그때 계산 , 누적 !
vector<int> tmp; //살아있는 나무들로 갱신용!!
sort(arr[i][j].begin(), arr[i][j].end());
for(auto age : arr[i][j]) {
if(yangbun[i][j] < age) { //양분부족 -> die
die_cnt+=age/2;
}
else {
yangbun[i][j]-=age; // 양분 = 양분 - 나이
tmp.push_back(age+1); //나이1살 더해야함
}
}
//삭제보다, 초기화후 살아있는것 다시 대입!!
arr[i][j].clear();
arr[i][j]=tmp;
yangbun[i][j]+=die_cnt;
}
}
}
void fall() {
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
for(auto age : arr[i][j]) {
if(age%5!=0) continue;
for(int k=0;k<8;++k) {
int ny = i+dy[k];
int nx = j+dx[k];
if(ny < 0 || nx <0 || ny>=n || nx>=n) continue;
arr[ny][nx].push_back(1);
}
}
}
}
}
void winter() {
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
yangbun[i][j]+=A[i][j];
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m>>k;
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
cin>>A[i][j];
yangbun[i][j]=5;
}
}
for(int i=0;i<m;++i) {
int a,b,c;
cin>>a>>b>>c;
a--; b--; // 0-idx로
//주의! 나이는 빼면안됨
arr[a][b].push_back(c); //(a,b)좌표에 나이c 나무가 살고있어요
}
for(int i=0;i<k;++i) {
springSummer();
fall();
winter();
}
ll ret=0;
for(int i=0;i<n;++i) {
for(int j=0;j<n;++j) {
ret+=arr[i][j].size();
}
}
cout<<ret;
}
'Algorithm > 구현' 카테고리의 다른 글
[세모] 프로그래머스 가장많이 받은 선물 // 구현, 해시맵, 문자열을 인덱스로 (0) | 2025.05.11 |
---|---|
[세모] 백준 1269 대칭차집합 // 카운팅스타? 맵또는 배열 (0) | 2025.03.08 |
[틀림] [알고리즘] 백준 15685 드래곤 커브 // 구현, 기하문제는 규칙을 찾아라 (0) | 2025.02.16 |
[알고리즘] 백준 14891 톱니바퀴 // 구현, 배열회전 (0) | 2025.02.13 |
[알고리즘] 백준 12100 Easy // 구현, 대칭구현은 한방향만 만들고 배열회전을 이용하라 (0) | 2025.02.10 |