알고리즘 문제/Swift
[백준] 6549번 : 히스토그램에서 가장 큰 직사각형 - Swift
lingk
2021. 7. 25. 09:18
문제
https://www.acmicpc.net/problem/6549
6549번: 히스토그램에서 가장 큰 직사각형
입력은 테스트 케이스 여러 개로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, 직사각형의 수 n이 가장 처음으로 주어진다. (1 ≤ n ≤ 100,000) 그 다음 n개의 정수 h1, ..., hn (0 ≤ hi ≤
www.acmicpc.net
코드
import Foundation
var list = [Int]()
while(true)
{
let arr = readLine()?.split(separator: " ").map{Int($0)}
let num = arr![0]
if(num == 0){break}
list = [Int](repeating: 0, count: num!)
for i in 1...num!
{
list[i-1]=arr![i]!
}
print(solve(start: 0, end: num!-1))
}
func solve(start:Int, end:Int)->Int
{
if(start == end) {return list[start]}
let mid = (start+end)/2
var result = max(solve(start: start, end: mid) , solve(start: mid+1, end: end))
var left = mid
var right = mid + 1
var height = min(list[left], list[right])
result = max(result, height*2)
while(start < left || right < end)
{
if(start < left && right < end)
{
if (list[left - 1] < list[right + 1])
{
right += 1
height = min(height, list[right])
}else
{
left -= 1
height = min(height, list[left])
}
}
else if(start < left)
{
left -= 1
height = min(height, list[left])
}else if (right < end)
{
right += 1
height = min(height, list[right])
}
result = max(result, height * (right - left + 1))
}
return result
}
반응형