https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV134DPqAA8CFAYh&

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

 

#문제 해결 방법

앞 뒤로  두칸은 0으로 채워지기 때문에 

전체 순회를 하면서 현재칸과 앞뒤 +- 2칸과의 차이가 0 이상이라면 이 차이만큼

결과값에 더해주면 된다.

 

#전체 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    for (int i = 1; i <= 10; i++) { 
        int N;
        cin >> N;
        vector<int> buildings(N);
        for (int j = 0; j < N; j++) {
            cin >> buildings[j];
        }

        int count = 0;
        for (int k = 2; k < N - 2; k++) {
            int left1 = buildings[k] - buildings[k - 1];
            int left2 = buildings[k] - buildings[k - 2];
            int right1 = buildings[k] - buildings[k + 1];
            int right2 = buildings[k] - buildings[k + 2];

            if (left1 > 0 && left2 > 0 && right1 > 0 && right2 > 0) {
                int minView = min(min(left1, left2), min(right1, right2));
                count += minView;
            }
        }
    
        cout << count << '\n'; 
    }

    return 0;
}

+ Recent posts