import Foundation
func solution(_ n:Int, _ build_frame:[[Int]]) -> [[Int]] {
var answer = Set<[Int]>()
func canConstruct() -> Bool {
for structure in answer {
let x = structure[0], y = structure[1], a = structure[2]
// 기둥
if a == 0 {
if answer.contains([x - 1, y, 1]) || answer.contains([x, y, 1]) || answer.contains([x, y - 1, 0]) || y == 0 { continue }
return false
}
// 보
else {
if answer.contains([x, y - 1, 0]) || answer.contains([x + 1, y - 1, 0]) || (answer.contains([x - 1, y, 1]) && answer.contains([x + 1, y, 1])) { continue }
return false
}
}
return true
}
for structure in build_frame {
var valid = true
// 설치
if structure[3] == 1 {
answer.insert([structure[0], structure[1], structure[2]])
valid = canConstruct()
if !valid { answer.remove([structure[0], structure[1], structure[2]]) }
}
// 삭제
else {
let comp = [structure[0], structure[1], structure[2]]
answer.remove(comp)
valid = canConstruct()
if !valid { answer.insert(comp) }
}
}
return answer.sorted { lhs, rhs in
if lhs[0] == rhs[0] {
if lhs[1] == rhs[1] {
return lhs[2] < rhs[2]
}
return lhs[1] < rhs[1]
}
return lhs[0] < rhs[0]
}
}
반응형
'📝 코테 > 프로그래머스' 카테고리의 다른 글
[Swift] 프로그래머스12911 다음 큰 숫자 (0) | 2023.05.13 |
---|---|
[Swift] 프로그래머스42862 체육복 (0) | 2023.05.13 |
[Swift] 프로그래머스154539 뒤에 있는 큰 수 찾기 (0) | 2023.05.13 |
[Swift] 프로그래머스181188 요격시스템 (0) | 2023.05.12 |
[Swift] 프로그래머스92342 양궁대회 (0) | 2023.05.11 |