[BOJ]6198 옥상 정원 꾸미기

강동현·2023년 12월 8일
0

코딩테스트

목록 보기
6/111
  • sol1: stack을 활용한 풀이
    흔히 있는 스택문제의 유형(처음 보면 어렵지만 많이 보면 익숙해짐)
  1. for문을 돌며 현재 입력 값(height)과 stack의 top()의 값을 비교
  2. 현재 입력 값(height)이 stack의 top()보다 크거나 같다면 stk.pop()
  3. 스택의 크기만큼 answer에 더해줌(stk에 남은 빌딩은 현재 높이 빌딩을 볼 수 있는 빌딩)
  4. answer 출력
#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int count;
    stack<int> s;
    long long answer = 0;
    cin >> count;
    for(int i = 0; i < count; ++i){
        int height;
        cin >> height;
        //2. i) 스택에 있는 건물 중, 현재 건물보다 작은 건물들을 모두 빼줌
        while(!s.empty() && s.top() <= height) s.pop();
        //2. ii) 건물을 다 빼줬으면, 스택에 있는 개수만큼 값에 더해줍니다.
        answer += s.size();
        //2. iii) 해당 입력을 스택에 넣어줍니다.
        s.push(height);
    }
    cout << answer;
}
profile
GAME DESIGN & CLIENT PROGRAMMING

0개의 댓글