[SW Expert Academy] 1206. View
나의 풀이
1. 빌딩의 조망권을 위해서 고려해야 할 이웃 빌딩은 빌딩의 2칸 왼쪽부터 2칸 오른쪽까지이다.
2. 현재 빌딩에서 조망권을 갖는 층 수는 현재 빌딩의 높이에서 조망권 확보를 위한 이웃 빌딩의 최고 높이를 뺀 값이다.
3. 조망권 확보를 위한 이웃 빌딩이 현재 빌딩의 높이보다 높을 경우, 조망권 확보가 불가능하다.
위 사항들을 고려하여 순차적으로 코딩하였다!
나의 코드
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 | #include<iostream> #include<string.h> using namespace std; int num, ans; int building[1001]; int findmaxheight( int idx) { // idx-2, idx-1, idx+1, idx+2 중 가장 높은 값 구하기. if (building[idx - 2] >= building[idx - 1]) { if (building[idx - 2] >= building[idx + 1]) { if (building[idx - 2] >= building[idx + 2]) return idx - 2; else return idx + 2; } else { if (building[idx + 1] >= building[idx + 2]) return idx + 1; else return idx + 2; } } else { if (building[idx - 1] >= building[idx + 1]) { if (building[idx - 1] >= building[idx + 2]) return idx - 1; else return idx + 2; } else { if (building[idx + 1] >= building[idx + 2]) return idx + 1; else return idx + 2; } } } int main( void ) { for ( int i = 1; i <= 10; i++) { cin >> num; memset (building, 0, sizeof ( int )*1001); ans = 0; for ( int j = 0; j < num; j++) { cin >> building[j]; } for ( int j = 2; j < num-2; j++) { int max_hidx = findmaxheight(j); if (building[j] > building[max_hidx]) ans += building[j]-building[max_hidx]; } cout << '#' << i << ' ' << ans << '\n' ; } return 0; } |
'Problem > Brute force' 카테고리의 다른 글
[SW Expert Academy] 1209. Sum (0) | 2019.02.26 |
---|---|
[SW Expert Academy] 1208. Flatten (0) | 2019.02.26 |
[S/W Expert Academy] 1204. 최빈수 구하기 (0) | 2019.02.26 |
[C/C++] BOJ 1107 :: 리모컨 (0) | 2019.02.07 |
[C/C++] BOJ 1079 :: 마피아 (0) | 2019.02.04 |