문제
링크 : programmers.co.kr/learn/courses/30/lessons/64061
코드 보기
더보기
import Foundation
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
var copiedBoard = board
var basket: [Int] = []
var answer = 0
moves.forEach {
for deep in 0..<copiedBoard.count {
if copiedBoard[deep][$0-1] != 0 {
basket.append(copiedBoard[deep][$0-1])
copiedBoard[deep][$0-1] = 0
breakDoll()
break
}
}
}
func breakDoll() {
if basket.count > 1 {
let lastIndex = basket.index(basket.endIndex, offsetBy: -1)
let index = basket.index(basket.endIndex, offsetBy: -2)
if basket[lastIndex] == basket[index] {
basket.removeLast(2)
answer += 2
}
}
}
return answer
}
해설 & 느낀점
약간 고등학교때 사설 모의고사와 비교했을 때에 3, 6, 9월 모의고사 문제들이 더 참신하고 재밌듯이(?)
카카오에서 나오는 코딩테스트 문제들은 이미지가 첨부되어있는 문제들이 많아서 뭔가 재미있는거 같아요 ㅎㅎ
일단 문제로 넘어가서... 뭔가 2차원 Array에서 인형을 뽑아오고, 바구니에 넣어서 같은 인형인 경우에는 터트려서 사라지게하는걸 보니 !
Stack/Queue 문제라는게 딱 감이 오는 문제인 것 같습니다.
코드를 보시면 8Line에서 인형을 뽑는 횟수 만큼, 안의 로직을 돌게 합니다.
여기서 안의 로직은 인형을 뽑으러 집게를 통(2차원 배열)안에 넣습니다.
0인 경우(인형이 없는 경우)는 더 밑으로 들어가고 0이 아닌 경우(인형이 있는 경우)에는 basket에 담고 통 안의 인형은 삭제(0으로 변환)시킵니다.
그리고 breakDoll() 함수를 실행시키는데 이 함수에서는 같은 인형이 놓여지는 순간 터지게됩니다. 즉, 배열에서 동일한 두 값이 삭제되죠.
이렇게 스택/큐를 통해 간단히 문제를 해결해봤습니다.
'Algorithm의 모든것' 카테고리의 다른 글
[Algorithm의 모든것] Swift_큐(Queue) (0) | 2021.03.23 |
---|---|
[Algorithm의 모든것] Swift_스택(Stack) (0) | 2021.03.22 |
[Algorithm의 모든것] (Swift)프로그래머스-다리를 지나는 트럭 (0) | 2020.08.27 |
[Algorithm의 모든것] (Swift)프로그래머스-자연수 뒤집어 배열로 만들기 (0) | 2020.06.28 |
[Algorithm의 모든것] (Swift)프로그래머스-정수 제곱근 판별 (0) | 2020.06.18 |