728x90
moves의 원소를 받아 보드의 top부터 내려가며 인형이 연속되는지 검사하는 문제입니다.
board의 원소를 검사하면서 인형이 존재하는 top을 검사하고, moves의 인형이 stack의 마지막 원소를 포함하는지 검사하면서 풀었습니다.
다른 분 풀이 보니까 n * n 배열이고, 최대 n이 100으로 크지 않아서 revsed → popLast도 좋은 방법인 것 같습니다.
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
var stack: [Int] = []
var top: [Int] = Array(repeating: board.count - 1, count: board.count)
for (i, arr) in board.enumerated() {
for (j, ele) in arr.enumerated() {
if ele != 0 {
top[j] = min(top[j], i)
}
}
}
return moves.reduce(0) {
if top[$1 - 1] <= board.count - 1 {
let i = top[$1 - 1], j = $1 - 1
top[$1 - 1] += 1
if stack.suffix(1).contains(board[i][j]) {
stack.removeLast()
return $0 + 2
}
else {
stack.append(board[i][j])
}
}
return $0
}
}
728x90
'Algorithm' 카테고리의 다른 글
SwiftUI: 체육복 (0) | 2024.03.07 |
---|---|
SwiftUI: 가장 많이 받은 선물 (1) | 2024.02.05 |
SwiftUI: [카카오 인턴] 키패드 누르기 (1) | 2023.12.18 |
SwiftUI: 햄버거 만들기 (0) | 2023.12.17 |
SwiftUI: 신고 결과 받기 (0) | 2023.12.17 |