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
- Union-find
- Smilegate
- 소감
- 유니온파인드
- 1편
- 식단
- 코테
- BaekJoon
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- 코딩테스트
- 투포인터
- 스마일게이트
- 삼성 #코테 #2020상반기 #c++
- 카카오
- BFS
- 알고리즘
- 카카오인턴
- 서버개발캠프
- 백준
- 중반부
- 보석쇼핑
- LIS #Algorithm #요소추적
- c++
- Algorithm
Archives
- Today
- Total
짱아의 개발 기록장
[Algorithm] 2018 하반기 삼성전자 코딩테스트 - 나무재테크(c++) 본문
반응형
정말 말 그대로 문제에서 봄, 여름, 가을, 겨울에 해당하는 조건들을 다 구현해주면 되는 구현문제이다.
다만, 어떠한 자료구조에 나무의 상태, 양분의 상태를 저장할지 코드를 설계하는 초반 작업이 중요하다고 생각된다.
글쓴이는
vector<int> tree[11][11]; 에 나무의 상태를 저장했다. (한 칸에도 여러 그루의 나무가 있을 수 있기 때문)
그리고 2차원 배열 형태로 양분을 저장했다.
코드 첨부
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
// 나무재테크
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
int n, m, k, x, y, z;
int vitamin[11][11] = {0, }; // 땅이 가지고 있는 양분
int summer_vit[11][11] = {0, }; // 여름에 추가할 양분
int a[11][11] = {0, }; // 겨울에 추가할 양분
vector<int> tree[11][11];
int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
void Spring()
{
memset(summer_vit, 0, sizeof(summer_vit));
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(tree[i][j].size()>0){
sort(tree[i][j].begin(), tree[i][j].end());
int idx = 0; // 죽을 나무의 인덱스 저장
bool check = false;
for(int k=0; k<tree[i][j].size(); k++){
if(vitamin[i][j]>=tree[i][j][k]){
vitamin[i][j] -= tree[i][j][k];
tree[i][j][k]++;
}else{
if(check==false){
check = true;
idx = k;
}
summer_vit[i][j] += (tree[i][j][k]/2);
}
}
if(check==true){
tree[i][j].erase(tree[i][j].begin()+idx, tree[i][j].end());
}
}
}
}
}
void Summer()
{
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
vitamin[i][j] += summer_vit[i][j];
}
}
}
void Fall()
{
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(tree[i][j].size()>0){
for(int k=0; k<tree[i][j].size(); k++){
if(tree[i][j][k]%5==0){
for(int t=0; t<8; t++){
int nx = i+dx[t];
int ny = j+dy[t];
if(1<=nx && nx<=n && 1<=ny && ny<=n){
tree[nx][ny].push_back(1);
}
}
}
}
}
}
}
}
void Winter()
{
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
vitamin[i][j] += a[i][j];
}
}
}
int main()
{
cin>>n>>m>>k;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cin>>a[i][j];
vitamin[i][j] = 5;
}
}
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();
Summer();
Fall();
Winter();
}
int cnt = 0;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cnt += tree[i][j].size();
}
}
cout<<cnt<<"\n";
return 0;
}
|
cs |
문제 첨부
github 첨부
github.com/jungahshin/algorithm/blob/master/c:c%2B%2B/16235_review_3.cpp
반응형
'Algorithm > 삼성 sw 역량테스트 기출' 카테고리의 다른 글
[Algorithm] 삼성전자 코딩테스트 - 구슬 탈출 2(c++) (0) | 2020.09.21 |
---|---|
[Algorithm] 2020 상반기 삼성전자 코딩테스트 오전 - 모노미노도미노(c++) (0) | 2020.09.17 |
[Algorithm] 2020 상반기 삼성전자 코딩테스트 오전 - 청소년 상어(c++) (0) | 2020.07.29 |
[Algorithm] 2020 상반기 삼성전자 코딩테스트 오후 - 스타트 택시(c++) (0) | 2020.07.20 |
[Algorithm] 2020 상반기 삼성전자 코딩테스트 오후 - 어른 상어(c++) (0) | 2020.07.19 |
Comments