[BOJ] 옥상 정원 꾸미기 6198번 C++

2025. 4. 9. 14:53· Algorithm
목차
  1.  

 

문제

도시에는 N개의 빌딩이 있다.

빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다.

i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으로만 볼 수 있다.

i번째 빌딩 관리인이 볼 수 있는 다른 빌딩의 옥상 정원은 i+1, i+2, .... , N이다.

그런데 자신이 위치한 빌딩보다 높거나 같은 빌딩이 있으면 그 다음에 있는 모든 빌딩의 옥상은 보지 못한다.

예) N=6, H = {10, 3, 7, 4, 12, 2}인 경우

             = 
 =           = 
 =     -     = 
 =     =     =        -> 관리인이 보는 방향
 =  -  =  =  =   
 =  =  =  =  =  = 
10  3  7  4  12 2     -> 빌딩의 높이
[1][2][3][4][5][6]    -> 빌딩의 번호
  • 1번 관리인은 2, 3, 4번 빌딩의 옥상을 확인할 수 있다.
  • 2번 관리인은 다른 빌딩의 옥상을 확인할 수 없다.
  • 3번 관리인은 4번 빌딩의 옥상을 확인할 수 있다.
  • 4번 관리인은 다른 빌딩의 옥상을 확인할 수 없다.
  • 5번 관리인은 6번 빌딩의 옥상을 확인할 수 있다.
  • 6번 관리인은 마지막이므로 다른 빌딩의 옥상을 확인할 수 없다.

따라서, 관리인들이 옥상정원을 확인할 수 있는 총 수는 3 + 0 + 1 + 0 + 1 + 0 = 5이다.

입력

  • 첫 번째 줄에 빌딩의 개수 N이 입력된다.(1 ≤ N ≤ 80,000)
  • 두 번째 줄 부터 N+1번째 줄까지 각 빌딩의 높이가 hi 입력된다. (1 ≤ hi ≤ 1,000,000,000)

출력

  • 각 관리인들이 벤치마킹이 가능한 빌딩의 수의 합을 출력한다.

 

접근 방식

 

스택을 이용해서 풀이하면 되는데

왼쪽 빌딩부터 오른쪽 빌딩 순으로 반복문을 돌면서

스택에는 현재 건물보다 같거나 낮은 건물은 제거하고, 현재 볼수있는 건물만 남겨둔다

이렇게 하면 현재 건물에서 볼 수 있는 빌딩들의 수를 더해주면 끝이다

 

즉 10 3 7 4 12 2 건물이 있을 때

10은 현재 스택에 비어있으니까 볼 수 있는 건물의 수는 0

3은 현재 스택의 top 값이 10인데 3보다 크니 3을 볼 수 있는 건물이니 1

7은 현재 스택의 값 [10,3] 중 3을 제외한 10이 7을 볼 수 있는 건물이니 1

...

이런식으로 하면 전체 합이 0 + 1 + 1 + 2 + 0 + 1 = 5로 원하는 총합을 구할 수 있다.

 

코드

#include<bits/stdc++.h>
using namespace std;

int main() {
    int N; cin>>N;
    stack<int> st;
    long long cnt = 0;

    for(int i=1; i<=N; i++){
        int h; cin>>h;

        while(!st.empty() && st.top() <= h) {
            st.pop();
        }

        cnt += st.size();
        st.push(h);
    }
    cout<<cnt;
}

'Algorithm' 카테고리의 다른 글

[BOJ] 트럭 13335번 C++  (0) 2025.04.24
[BOJ] 줄서기 17178번 C++  (0) 2025.04.09
[BOJ] 포스택 25556번 C++  (0) 2025.04.08
[BOJ] 북극곰은 괄호를 찢어 25918번 C++  (0) 2025.03.30
[BOJ] 화학식량 2257번 C++  (0) 2025.03.30
  1.  
'Algorithm' 카테고리의 다른 글
  • [BOJ] 트럭 13335번 C++
  • [BOJ] 줄서기 17178번 C++
  • [BOJ] 포스택 25556번 C++
  • [BOJ] 북극곰은 괄호를 찢어 25918번 C++
따봉치치
따봉치치
따봉치치
김치치의개발블로그
따봉치치
전체
오늘
어제
  • 분류 전체보기 (359)
    • 면접질문 (4)
    • CS (50)
    • FE (116)
      • Javascipt (16)
      • Typescipt (6)
      • React (16)
      • CSS (5)
      • Nextjs (1)
      • 리뷰 (70)
    • Algorithm (181)
    • ETC (3)
      • Bootcamp (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스택
  • 데이터베이스
  • typescript
  • 문자열
  • 투 포인터
  • Stack
  • 리액트
  • BOJ
  • react
  • javascript
  • 백준
  • 모던 리액트 딥다이브
  • 자바스크립트
  • 그래프 탐색
  • Fe
  • 완전탐색
  • 우선순위 큐
  • 그리디
  • 누적합
  • TOPCIT
  • 알고리즘
  • BFS
  • 탐욕 알고리즘
  • 모던 자바스크립트 딥다이브
  • Greedy
  • dp
  • CS
  • 자료구조
  • C++
  • 백트래킹

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
따봉치치
[BOJ] 옥상 정원 꾸미기 6198번 C++
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.