반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 월부TV
- 역행자
- 경제적 자유를 위한 5가지 공부법
- 제로금리정책
- 경제금융용어
- 웅덩이 매매법
- 경제기사 읽기
- 원금리스크
- 부동산기사읽기
- 평균급여액
- 백준 1238
- 유전자오작동
- 자의식 해체
- 구해줘월부
- 엥겔의법칙
- 백준 파티
- 급여액
- 부동산 기사읽기
- 경제 기사읽기
- 이중통화채(dual currency bond)
- 자발적 실업
- 정체성 만들기
- KFO
- 업무지구별
- 행크TV
- 특수목적기구
- 황농문 서울대교수
- 매일경제
- 한국직업개발원
- 연방준비제도(FRS)/연방준비은행(FRB)
Archives
- Today
- Total
록키의 No Pain, No Gain
[BOJ] 16235번 나무 재테크 본문
반응형
https://www.acmicpc.net/problem/16235
16235번: 나무 재테크
부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터
www.acmicpc.net
시뮬레이션 문제
문제를 잘 읽고 이를 시각화 시키는 연습이 필요할 것 같다.
조급해 하지 말고 문제 집중해서 제대로 읽기
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
int N, M, K;
int A[11][11];
int map[11][11];
vector<int> tree[11][11];
int dx[] = { -1,-1,-1,0,0,1,1,1 };
int dy[] = { -1,0,1,-1,1,-1,0,1 };
void spring() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
vector<int> v = tree[i][j];
int value = 0;
for (int k = v.size() - 1; k >= 0; k--) {
if (v[k] <= map[i][j]) {
map[i][j] -= v[k];
v[k]++;
}
else {
value += v[k] / 2;
v.erase(v.begin()+k);
}
}
map[i][j] += value;
tree[i][j] = v;
}
}
}
void fall() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
vector<int> v = tree[i][j];
for (int k = v.size() - 1; k >= 0; k--) {
if (v[k] % 5 == 0) {
for (int l = 0; l < 8; l++) {
int nx = i + dx[l];
int ny = j + dy[l];
if (nx < 1 || nx > N || ny < 1 || ny > N)
continue;
tree[nx][ny].push_back(1);
}
}
}
}
}
}
void winter() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
map[i][j] += A[i][j];
}
}
}
int calc() {
int ret = 0;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
ret += tree[i][j].size();
}
}
return ret;
}
int main() {
cin >> N >> M >> K;
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j++) {
cin >> A[i][j];
map[i][j] = 5;
}
}
int x, y, z;
for (int i = 0; i < M; i++) {
cin >> x >> y >> z;
tree[x][y].push_back(z);
}
for (int i = 0; i < K; i++) {
spring();
fall();
winter();
}
cout << calc();
}
반응형
'알고리즘' 카테고리의 다른 글
[BOJ] 1238 파티 (0) | 2020.05.22 |
---|---|
[BOJ] 1238 파티 (0) | 2020.05.22 |
[SWEA] 점심 식사시간 (0) | 2020.05.13 |
[BOJ] 17471번 게리멘더링 (0) | 2020.04.28 |
[BOJ] 17822번 원판 돌리기 (0) | 2020.04.28 |
Comments