SW Expert Academy - 1206. View
1 minute read
문제링크
문제설명
- 강변에 빌딩들이 옆으로 빽빽하게 밀집한 지역이 있다.
- 빌딩은 최대 255의 높이를 가지고 있고, 높이 1당 하나의 가구를 의미한다.
- 각 세대가 조망권을 확보하기 위해서는 좌우로 2칸 이상의 공백이 존재해야 한다.
- 조망권이 확보된 세대의 수를 반환하는 프로그램을 작성하라
문제접근
- 입력 받는 N개의 빌딩 중 좌우 2칸씩(총 4칸)은 높이가 항상 0이다.
- 좌우로 2칸씩 빌딩의 높이 차이를 모두 구한다.
- 4개의 값중 하나라도 음수인 경우 조망권을 확보하지 못한다.
- 4개의 값이 모두 양수인 경우 최솟값이 조망권이 확보된 세대 수가 된다.
- 모든 빌딩에 대해 위 로직을 반복한다.
구현
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char** argv)
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int test_case;
int T = 10;
// freopen("input.txt", "r", stdin);
for (test_case = 1; test_case <= T; ++test_case)
{
int N; // 건물의 개수 = 가로의 길이
scanf("%d", &N);
vector<int> building(N, 0);
for (int i = 0; i < N; i++) {
scanf("%d", &building[i]);
}
vector<int> diff(4, 0);
int cnt = 0;
for (int i = 2; i < N - 2; i++) {
diff[0] = building[i] - building[i - 1];
diff[1] = building[i] - building[i - 2];
diff[2] = building[i] - building[i + 1];
diff[3] = building[i] - building[i + 2];
if ((diff[0] > 0) && (diff[1] > 0) && (diff[2] > 0) && (diff[3] > 0)) {
cnt += *min_element(diff.begin(), diff.end());
}
}
printf("#%d %d\n", test_case, cnt);
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
Leave a comment