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 |
댓글