안녕 세상아,

[SWEA/c++] 1206. [S/W 문제해결 기본] 1일차 본문

SWEA

[SWEA/c++] 1206. [S/W 문제해결 기본] 1일차

돈 많은 백수가 되고싶다 2024. 10. 5. 18:11

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

SW Expert Academy

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

swexpertacademy.com

 

SWEA 처음 풀어보는데 낯선 입출력때문에 꽤나 오래 걸렸다..삼성 준비할 수도 있으니까 하루에 하나씩이라도 꾸준히 풀어봐야겠다. 문제 자체는 그렇게 어렵지 않던데..T를 입력 받지 않고 T=10으로 고정하고 실행해야지 정답 처리가 된다..왜..? 띠용 ㅜ...

 

암튼 푸는 방법은

1. 현재 기준으로 좌우로 두칸씩 비교하면 된다. 

2. 하지만 크기가 5이상일 때만 성립이 되기 때문에 조건을 달아놓는다. 

3. 좌우로 두칸씩이기 때문에 총 4개의 값을 max로 비교한다. 

 -> 다른 방법으로는 max값을 변수로 지정하고 큰 값으로 계속 갱신해준다. 

4. 기준 값에서 가장 큰 값을 빼주고 계속 더해준다. 

#include<iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(int argc, char** argv)
{
    int test_case;
    int T=10;
    /*
       여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
    */
    for (test_case = 1; test_case <= T; ++test_case)
    {
        int answer = 0;
        //좌우로 두칸..
        int x;
        int y;
        cin >> x;
        vector<int> v;

        for (int i = 0; i < x; i++) {
            cin >> y;
            v.push_back(y);
        }

        if (x > 4) {
            for (int i = 2; i < v.size() - 2; i++) {

                if (v[i] > v[i - 1] && v[i] > v[i - 2] && v[i] > v[i + 1] && v[i] > v[i + 2]) {
                    int leftMax = max(v[i - 1], v[i - 2]);
                    int rightMax = max(v[i + 1], v[i + 2]);
                    int finMax = max(leftMax, rightMax);

                    answer += v[i] - finMax;
                }
            }
        }
        cout << "#" << test_case << " " << answer << endl;
    }
    return 0;//정상종료시 반드시 0을 리턴해야합니다.
}