문제 : https://www.acmicpc.net/problem/14719
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
풀이방법
벽을 2차원 배열로 만들고 row 한줄씩 본다.
1과 1사이를 두개의 포인터로 지정후 가운데를 2로 채운다.
2의 갯수를 센다.
코드
import Foundation
func checkRainWater() -> Int {
var mapInfo = readLine()!.components(separatedBy: " ").map{Int($0)!}
let wall = readLine()!.components(separatedBy: " ").map{Int($0)!}
let width = mapInfo[0]
let columns = mapInfo[1]
var result = 0
var map = Array(repeating: Array(repeating: 0, count: columns), count: width)
//벽 채우기 : 1
for column in 0..<columns {
for row in 0..<wall[column] {
map[width-1-row][column] = 1
}
}
for row in 0..<width {
var startIndex = -1
var endIndex = -1
for elementIndex in 0..<map[row].count {
//벽이 있는 곳 : 1
if map[row][elementIndex] == 1 {
if startIndex == endIndex {
startIndex = elementIndex
} else {
endIndex = elementIndex
for index in startIndex+1..<endIndex {
//물이 고인곳 : 2
map[row][index] = 2
result += 1
}
startIndex = endIndex
endIndex = -1
}
}
}
}
return result
}
print(checkRainWater())
투포인터 + 완전탐색으로 풀었는데 다른분이 푼 것보다 느렸다. 완탐말고 다른 방법을 생각해 봐야하는 것 같다.
반응형
'알고리즘' 카테고리의 다른 글
[그리디] 큰 수 만들기 - 프로그래머스 Swift (0) | 2021.08.02 |
---|---|
[Queue] Reveal Cards in Increasing Order - LeetCode Swift (0) | 2021.07.29 |
[배열] QueensThatCanAttackTheKing - LeetCode Swift (0) | 2021.07.28 |
[해쉬] Group -anagrams - LeetCode Swift (0) | 2021.07.28 |
[LinkedList] remove-nth-node-from-end-of-list - LeetCode Swift (0) | 2021.07.23 |