KoreanFoodie's Study
SW 역량테스트 - [백준] 나무 재테크 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [백준] 나무 재테크 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 10. 15. 23:46
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : www.acmicpc.net/problem/16235
해답 코드 :
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
int N, M, K;
// number of fertilizer in the cell
int map[10][10];
int A[10][10];
deque<int> trees[10][10];
int ans;
int dR[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dC[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
bool isRange(int row, int col) {
if (row < 0 || row >= N || col < 0 || col >= N) {
return false;
}
else return true;
}
deque<int> push_in_sorted(deque<int> test, int input) {
int cur_val;
deque<int> temp;
if (test.empty()) {
test.push_back(input);
return test;
}
else {
for (int i = 0; i < test.size(); i++) {
cur_val = test[i];
if (cur_val < input) {
continue;
}
else {
test.insert(test.begin() + i, input);
return test;
}
}
}
}
void spring_summer() {
deque<int> alive;
deque<int> dead;
// spring
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (!trees[i][j].empty()) {
for (int num = 0; num < trees[i][j].size(); num++) {
// eat nutrient
if (map[i][j] >= trees[i][j][num]) {
map[i][j] -= trees[i][j][num];
trees[i][j][num]++;
//temp = push_in_sorted(temp, trees[i][j][num]);
//temp.push_back(trees[i][j][num]);
alive.push_back(trees[i][j][num]);
}
// impossible to eat nutrient
// summer 1 (dead trees)
else {
dead.push_front(trees[i][j][num]);
}
}
// spring + summer 2 -> update dead trees
(trees[i][j]).clear();
for (int num = 0; num < alive.size(); num++) {
(trees[i][j]).push_back(alive[num]);
}
//copy(temp.begin(), temp.end(), trees[i][j]);
alive.clear();
// add nutrients
for (int num = 0; num < dead.size(); num++) {
map[i][j] += (dead[num] / 2);
}
dead.clear();
}
}
}
}
void fall() {
int n_r, n_c;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int num = 0; num < trees[i][j].size(); num++) {
if (trees[i][j][num] % 5 == 0) {
for (int dir = 0; dir < 8; dir++) {
n_r = i + dR[dir];
n_c = j + dC[dir];
if (isRange(n_r, n_c)) {
trees[n_r][n_c].push_front(1);
}
}
}
}
}
}
}
void winter() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
map[i][j] += A[i][j];
}
}
}
int main() {
fill(&map[0][0], &map[9][10], 5);
int t_r, t_c, t_a;
ans = 0;
cin >> N >> M >> K;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> A[i][j];
}
}
for (int i = 0; i < M; i++) {
cin >> t_r >> t_c >> t_a;
trees[t_r - 1][t_c - 1].push_back(t_a);
}
for (int i = 0; i < K; i++) {
spring_summer();
fall();
winter();
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
ans += trees[i][j].size();
}
}
cout << ans << endl;
};
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [백준] 미세먼지 안녕! 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
---|---|
SW 역량테스트 - [백준] 아기 상어 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 인구 이동 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 큐빙 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 드래곤 커브 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
Comments