반응형
14620번: 꽃길
2017년 4월 5일 식목일을 맞이한 진아는 나무를 심는 대신 하이테크관 앞 화단에 꽃을 심어 등교할 때 마다 꽃길을 걷고 싶었다. 진아가 가진 꽃의 씨앗은 꽃을 심고나면 정확히 1년후에 꽃이 피므
www.acmicpc.net
알고리즘 종류
완전탐색
사고 과정
DFS로 3개의 씨앗을 심을 위치를 선택합니다. 위치를 선택할 때에는 범위 밖으로 나가는지, 다른 꽃과 겹피는지 확인합니다. 이후, 3개를 심을 수 있으면 비용을 계산하여 최소 비용으로 갱신해 줍니다.
구현(C++)
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
|
#include <iostream>
#include <vector>
using namespace std;
int n;
int ans=987654321;
int cost[11][11];
int mat[11][11];
bool check(int y, int x){
if(mat[y][x]) return false;
if(mat[y+1][x]) return false;
if(mat[y][x+1]) return false;
if(mat[y-1][x]) return false;
if(mat[y][x-1]) return false;
return true;
}
void marking(int y, int x){
mat[y][x] = 1;
mat[y+1][x] = 1;
mat[y][x+1] = 1;
mat[y-1][x] = 1;
mat[y][x-1] = 1;
}
void unmarking(int y, int x){
mat[y][x] = 0;
mat[y+1][x] = 0;
mat[y][x+1] = 0;
mat[y-1][x] = 0;
mat[y][x-1] = 0;
}
void dfs(int cnt){
if(cnt==3){
int sum = 0;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
if(mat[i][j]) sum += cost[i][j];
}
}
if(ans > sum) ans = sum;
return;
}
for(int i=1; i<n-1; i++){
for(int j=1; j<n-1; j++){
if(!check(i, j)) continue;
marking(i, j);
dfs(cnt+1);
unmarking(i, j);
}
}
}
int main(void){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin >> cost[i][j];
}
}
dfs(0);
cout << ans << endl;
}
|
cs |
시행착오
반응형
'코딩 공부 > 백준' 카테고리의 다른 글
[백준][C++] 16198 에너지 모으기 (0) | 2021.04.15 |
---|---|
[백준][C++] 4179 불! (0) | 2021.04.15 |
[백준][C++] 2422 한윤정이 이탈리에 가서 아이스트림을 사먹는데 (0) | 2021.04.15 |
[백준][C++] 14499 주사위 굴리기 (0) | 2021.04.11 |
[백준][C++] 3190 뱀 (0) | 2021.04.11 |