가장 먼저 하고싶은 말은... 이렇게 하시면 안됩니다...
1. Leetcode-(42 Trapping Rain Water)
https://leetcode.com/problems/trapping-rain-water/
2. 알고리즘 카테고리 : 투포인터, 스택 등
3. 나의 풀이 알고리즘(1차) : 투포인터
- 가장 높은 top을 기준으로 왼쪽, 오른쪽 Section을 나누고 그 내에서 포인터를 top, next 포인터를 이동시키면서 pool의 수를 count 해주었음
- 기록으로 남겨두기 위함으로, 코드를 잘 작성해서 기록하기보다 앞으로 개선하겠다는 의지의 첫 걸음으로 작성하는 것이다.
import Foundation
class Solution {
func trap(_ height: [Int]) -> Int {
var score = 0
var standard = Int(height.firstIndex(of: height.max()!)!)
if standard == 0 {
score += stopper(height: height, standard: standard)
} else if standard == height.count-1 {
var newheight = Array(height.reversed())
score += stopper(height: newheight, standard: Int(newheight.firstIndex(of: newheight.max()!)!))
}
else {
score += stopper(height: height, standard: standard)
let newheight = Array(height.reversed())
score += stopper(height: newheight, standard: Int(newheight.lastIndex(of: newheight.max()!)!))
}
return score
}
func stopper(height: [Int], standard: Int) -> Int {
var top = standard
var count : Int = 0
while top < height.count-2 {
let result = countRainPool(height: height, top: top, count: count) // 다음 top, 현재까지 count
top = result.0
count = result.1
}
return count
}
func countRainPool(height: [Int], top: Int, count: Int) -> (Int,Int) {
var count = count
let section = makeNewSection(height: height, top: top)
var newtop = section.0
let newnext = section.1
if newnext - newtop == 1 && newnext == height.count - 1 {
return (newtop, count)
}
for c in height[section.0+1...section.1-1] {
count += height[section.1] - c
}
newtop = newnext
return (newtop, count)
}
func makeNewSection(height: [Int], top: Int) -> (Int,Int) {
var top : Int = top
let next : Int = Int(height[top+1...height.count-1].firstIndex(of: height[top+1...height.count-1].max()!)!)
let result : (Int,Int) = (top, next)
if next == height.count-1 {
return result
}
if next - top == 1 {
top = next
return makeNewSection(height: height, top: top)
}
return result
}
}
'알고리즘' 카테고리의 다른 글
[백준-2583] 영역 구하기 #DFS #BFS (0) | 2024.06.24 |
---|---|
[백준-11279,1927] 최대힙, 최소힙 #힙 (0) | 2024.06.11 |
[프로그래머스-42577] 전화번호목록 #해시(Hash) #트라이(Trie) #세트(Set) (0) | 2023.06.27 |