초보개발자

[6549] 히스토그램에서 가장 큰 직사각형 본문

카테고리 없음

[6549] 히스토그램에서 가장 큰 직사각형

___yejin 2017. 7. 4. 11:50
  • 입력: 직사각형의 수 n(1≤n≤100,000) , n개의 직사각형의 높이 hi(1≤hi≤1,000,000,000), n = 0이면 종료
  • 출력: 각 테스트케이스에 대해서, 히스토그램에서 가장 큰 직사각형의 넓이
  • 알고리즘: 세그먼트 트리
  • 실패한 소스코드
    세그먼트 트리를 이용했는데, 트리에 각 구간에 대해 가장 낮은 높이를 저장해두고 높이를 따로 저장한다.
    실패한 이유로는 위와 같이 하게 되면 각 구간, 1/2만큼의 사이즈에 대해서만 높이를 구하기 때문에 예를 들면 n=8일때 h3~h7까지의 넓이가 가장 크다고 해도 구할 수 없다.
    즉, 가장 작은 높이를 가진 인덱스를 트리에 저장해두고 계산하는 방식으로 해야한다고 생각했다. 
  • 성공한 소스코드
    인터넷을 참고하여 문제를 풀었는데 위 식은 트리에 가장 낮은 높이의 인덱스를 저장해두고, 그 중 가장 큰 넓이를 찾는 방식이다. 소스코드를 참고한 사이트는 아래 첨부해놓았다. 아직은 미숙한거 같아, 유사한 문제를 알고스팟에 풀고 다른 문제를 다시 도전해볼 예정이다.
    세그먼트 트리에서는 어떤 기준으로 저장하냐와 접근하냐가 중요한 키워드인 것 같다.

  • 참고: https://www.acmicpc.net/problem/6549
  • 소스코드 참고: http://jason9319.tistory.com/44


Comments