일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고스팟
- VituralBox
- tensorflow
- 최소신장트리
- 쉬운 계단 수
- 나무자르기
- 최소스패닝트리
- 축사 배정
- 백준
- 네이버 지도 api
- 다이나믹 프로그래밍
- 이분탐색
- Flpyd-Warshall
- Floyd-Warshall
- pythonanywhere
- 이분매칭
- Mysql5.7
- 피노나치 수열
- 이친수
- SpringBoot
- 동적계획법
- 알고리즘
- 분할정복
- 피보나치수열
- 이분 매칭
- 세그먼트 트리
- 백트래킹
- Ubuntu64bit
- 연속합
- 코드그라운드
Archives
- Today
- Total
초보개발자
[6549] 히스토그램에서 가장 큰 직사각형 본문
- 입력: 직사각형의 수 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