문제
https://www.acmicpc.net/problem/6549
코드
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
}
반응형
'알고리즘 문제 > Swift' 카테고리의 다른 글
[백준] 2869번 : 달팽이는 올라가고 싶다 - Swift (2) | 2022.01.01 |
---|---|
[백준] 11047번 : 동전 0 - Swift (0) | 2021.08.06 |
[백준] 2579번 : 계단 오르기 - Swift (0) | 2021.07.24 |
[백준] 9095번 : 1, 2, 3 더하기 - Swift (0) | 2021.07.21 |
[백준] 1463번 : 1로 만들기 - Swift (0) | 2021.07.21 |