본문 바로가기
OJ 문제풀이/BOJ

BOJ #6198 옥상 정원 꾸미기

by EXE_김건형 2019. 9. 22.

문제 원본 : https://www.acmicpc.net/problem/6198

 

6198번: 옥상 정원 꾸미기

문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으로만 볼 수 있다. i번째 빌딩 관리인이 볼 수 있는 다른 빌딩의 옥상 정원은 i+1, i+2, .... , N이다. 그런데 자신이 위치한 빌딩보다 높거나 같은 빌딩이 있으면 그 다음에 있는 모든 빌딩의 옥상은 보지 못한다. 예) N=6, H = {10, 3, 7,

www.acmicpc.net

출처 : USACO 2006 November 2006 Contest Silver 1번

 

정답 소스코드

풀이법은 다음과 같습니다.

현재 확보된 시야를 저장할 배열을 선언합니다. (본문에서 int형 배열 build)

입력받을 빌딩의 개수를 저장한 후 각 빌딩의 높이를 입력받습니다.

그 후 lower bound를 이용하여 수정된 시야를 저장합니다. (본문에서 int형 배열 last)

이 때 일반적인 lower bound가 아닌 compare를 정의하여 역방향으로 확인하는 lower bound를 사용합니다.

수정된 시야에 위치한 높이로 build 배열의 값을 업데이트합니다.

lower bound로 last를 업데이트 한 후 바뀐 last들을 모두 합하면 정답을 얻을 수 있습니다. (본문에서 int형 변수 tot)

 

p.s. 위와 같이 lower bound를 이용한 풀이 말고 stack을 이용한 풀이도 있습니다.

'OJ 문제풀이 > BOJ' 카테고리의 다른 글

BOJ #11053 가장 긴 증가하는 부분 수열  (0) 2019.10.07
BOJ #1976 여행 가자  (0) 2019.09.24
BOJ #10026 적록색약  (0) 2019.09.23
BOJ #1932 정수 삼각형  (0) 2019.09.23

댓글