문제 출처: https://www.acmicpc.net/problem/16235
풀이
나무의 위치와 나무의 나이, 특정 좌표의 나무의 갯수를 2차원벡터로 표현할 수 있으면 나머지는 구현문제입니다.
나무의 갯수: v.[i][j].size()
나무의 나이: v[i][j][k]
나무의 위치: i,j
그리고 문제를 읽으실 때 주의하셔야 할게,
입력받는 배열과 양분이 5로 채워져있는 배열은 문제만 보면 어떤차이인지 의미가 모호할 수 있으므로 양분증감량을 계산할 때 주의하셔야합니다.
**이 풀이는 180ms가 나오는데 풀이법에 따라 100ms,50ms, 심지어 0ms가 나오는 방법들도 있기 때문에 그런 코드들을 참고하는것도 좋을 것 같습니다.
코드
#include<iostream> #include<algorithm> #include<vector> using namespace std; int yb[10][10], a[10][10]; int dy[8] = {-1,0,1,-1,1,-1,0,1 }; int dx[8] = {-1,-1,-1,0,0,1,1,1 }; int n, m, k; //해당위치의 나무의 나이를 저장하기위해서 벡터 vector<int>v[10][10]; int main() { cin.tie(0); cin.sync_with_stdio(false); cin >> n >> m >> k; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; yb[i][j] = 5; } } for (int i = 0; i < m; i++) { int y, x, z; cin >> y >> x >> z; v[y - 1][x - 1].push_back(z); } for (int i = 0; i < k; i++) { for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) { //봄 여름 //나무가 있을 떄만 if (v[y][x].size()) { int dead_tree = 0; vector<int>temp; sort(v[y][x].begin(), v[y][x].end()); for (int num = 0; num < v[y][x].size(); num++) { int age = v[y][x][num]; //양분이 나이보다 작으면 탈출 if (yb[y][x] >= age) { yb[y][x] = yb[y][x] - age; temp.push_back(age + 1); } //탈출하되 여름에 죽은게 양분으로 변하므로 else { dead_tree = dead_tree+age / 2; } } //비우고 새롭게 나이먹은 나무들을 다시 담음 v[y][x].clear(); for (int num = 0; num < temp.size(); num++) v[y][x].push_back(temp[num]); yb[y][x] += dead_tree; } } } for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) { //나무가 있는 좌표에대해서만 if (v[y][x].size()) { for (int i = 0; i < v[y][x].size(); i++) { int age = v[y][x][i]; if (age % 5 == 0) { for (int dis = 0; dis < 8; dis++) { int ny = y + dy[dis]; int nx = x + dx[dis]; if (nx >= 0 && ny >= 0 && nx < n && ny < n) { //인접한 칸에 나이1인 나무 생김 v[ny][nx].push_back(1); } } } } } } } for (int y = 0; y < n; y++) { for (int x = 0; x < n; x++) { yb[y][x] += a[y][x]; } } } int ans = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { ans += v[i][j].size(); } } cout << ans << '\n'; }
결과
'문제풀이(BOJ) > 삼성 sw역량테스트 기출' 카테고리의 다른 글
[백준 16637] 괄호 추가하기 (0) | 2020.02.05 |
---|---|
[백준 15685] 드래곤 커브 (0) | 2020.02.04 |
[백준 14500] 테트로미노 (0) | 2020.02.01 |
[백준17070] 파이프 옮기기1 (0) | 2020.01.30 |
[백준 17144] 미세먼지 안녕! (0) | 2020.01.29 |