본문 바로가기
알고리즘/백준 문제

1863 - 스카이라인 쉬운거

by HDobby 2023. 8. 6.

https://www.acmicpc.net/problem/1863

 

1863번: 스카이라인 쉬운거

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 50,000) 다음 n개의 줄에는 왼쪽부터 스카이라인을 보아 갈 때 스카이라인의 고도가 바뀌는 지점의 좌표 x와 y가 주어진다. (1 ≤ x ≤ 1,000,000. 0 ≤ y ≤ 500,000) 첫

www.acmicpc.net

생각해보기

  • 건물의 높이 변화를 중점으로 살펴보자.
  • 스택을 이용하자.

코드

#include<iostream>
#include<stack>
#include<vector>

using namespace std;
typedef pair<int, int> pii;

int n;
vector<int> structures;

void input(){
    int a;
    cin>>n;

    structures.resize(n);
    for(int i=0;i<n;++i){
        cin>>a>>structures[i];
    }
}

void solution(){
    //스택을 이용하여 높이만 비교, 현재 스택에 들어 있는 높이보다 높다면 제거 스택에 넣을 때는 cnt + 1
    int cnt = 0;
    stack<int> st;
    st.push(0);

    for(int i=0;i<n;++i){
        int num = structures[i];

        //높이가 동일한 경우 같은 건물 이므로 빼지 않는다.
        while(st.top() > num)
            st.pop();

        //높이가 달라진 경우 다른 건물이므로 cnt 증가 후 스택에 추가
        if(st.top() < num){
            st.push(num);
            ++cnt;
        }
    }

    cout<<cnt<<'\n';
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    input();
    solution();

    return 0;
}

728x90

'알고리즘 > 백준 문제' 카테고리의 다른 글

1976 - 여행 가자  (0) 2023.08.09
22251 - 빌런 호석  (0) 2023.08.07
2138 - 전구와 스위치  (0) 2023.08.06
7682 - 틱택토  (0) 2023.08.04
2467 - 용액  (0) 2023.08.02

댓글