안녕하세요!
예전에 python으로 풀어보았던 문제를 swift로 다시 풀어봤습니다.
https://programmers.co.kr/learn/courses/30/lessons/64061
풀이
board의 행과 열을 바꾼 배열 arr을 만듭니다.
이동할 move위치에서 0이 아닌 값이 나오면 꺼내고 stack에 넣어줍니다.
stack에 중복된 인형이 연달아 들어오면 제거해줍니다.
Swift 코드입니다.
import Foundation
func moveDoll(_ arr: inout [[Int]], _ idx: Int, _ stack: inout [Int]) {
var jdx = 0
while jdx < arr.count {
if arr[idx][jdx] != 0 {
stack.append(arr[idx][jdx])
arr[idx][jdx] = 0
break
} else {
jdx += 1
}
}
}
func removeDoll(_ stack: inout [Int]) -> Int {
if stack.count >= 2 {
let lastIdx = stack.count - 1
if stack[lastIdx] == stack[lastIdx - 1] {
stack.popLast()
stack.popLast()
return 2
}
}
return 0
}
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
var arr: [[Int]] = []
for i in 0..<board.count {
let temp = board.map { $0[i] }
arr.append(temp)
}
var stack: [Int] = []
var answer = 0
for index in moves {
let idx = index - 1
moveDoll(&arr, idx, &stack)
answer += removeDoll(&stack)
}
return answer
}
Python 코드입니다 :)
def solution(board, moves):
answer = 0
l = []
for k in moves:
for i in range(len(board)):
if board[i][k-1] != 0:
l.append(board[i][k-1])
board[i][k-1] = 0
break
c = True
while c:
if len(l) == 0:
break
for j in range(len(l)):
if j + 1 < len(l) and l[j] == l[j+1]:
answer += 2
del l[j:j + 2]
c = True
break
else:
c = False
return answer