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

채린·2024년 11월 15일
0

D3를 처음 풀어봤다. 생각보다 쉬웠는데 다른 사람들의 반응도 비슷한 걸 보니, 이 문제가 유난히 쉬운 편인 듯하다.


자신을 포함한 주변 5개의 건물 중에서 자신이 제일 크면 조망권이 확보된 세대가 생긴다.
내가 사용한 풀이는,
주변 5개의 건물을 vector에 담아 sort()로 정렬한 뒤, 첫 번째 값(최대값)이 현재 건물의 높이와 같은지 비교했다.

사실 계속 vector에 복사하고, 정렬하는 방식이 마음에 들지는 않았지만, 5개씩 처리하기 때문에 시간 복잡도에서 큰 문제가 될 것 같지는 않았다.


비슷한 방식으로 슬라이딩 윈도우를 사용할 수도 있을 것 같다.
근데 ~~ 이번 문제처럼 단순히 5개 중에서 최대값을 찾는 거라면, max를 이용해 한 번씩 계속 비교해도 상관없을거같다!

#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
    int N, answer, i;
    vector<int> building;
    vector<int> subset(5);
	for( int num=1; num<=10;num++){
        cin>>N;
        building.clear();
        building.resize(N,0);
        for(i=0;i<N;i++){
            cin>>building[i];
        }
        if(N==4) answer=0;
        else{
            answer=0;
            for(i=4;i<N;i++){
                subset.clear();
                subset.resize(5,0);
                copy(building.begin()+i-4,building.begin()+i+1,subset.begin());
                sort(subset.begin(),subset.end(),greater<int>());
                if(subset[0]==building[i-2]){
                    answer+=subset[0]-subset[1];
                }
            }
        }
        cout<<"#"<<num<<" "<<answer<<endl;
    }
    return 0;
}

0개의 댓글