https://programmers.co.kr/learn/courses/30/lessons/64061
[제한사항]
- board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
- board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
- 0은 빈 칸을 나타냅니다.
- 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
- moves 배열의 크기는 1 이상 1,000 이하입니다.
- moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.
간단 풀이는 코드 주석
//
// main.swift
// Programmers_카카오_크레인인형뽑기게임
//
// Created by 임지성 on 2021/09/12.
//
import Foundation
func solution(_ board: [[Int]], _ moves: [Int]) -> Int {
var copiedboard = board
var bucket = [Int]()
var removeCnt = 0
moves.forEach { move in
let trulyMoves = move - 1 // 실제 index
for idx in 0..<copiedboard.count {
let doll = copiedboard[idx][trulyMoves]
guard doll != 0 else { // doll = 0이 아니면 계속 진행
continue // 0이면 다음 반복 진행 (idx = 0 -> 1)
}
copiedboard[idx][trulyMoves] = 0 // 여까지 온건 copiedboard[idx][trulyMoves]에 수가 존재
// 인형을 크레인으로 들어올렸단 소리임 그럼 그 자리는 비어있어야됨 = 0
if bucket.last == doll { // 바구니에 담긴 마지막 인형이 들어올린 인형과 같다면
bucket.removeLast() // 제거후 제거 인형수 +2
removeCnt += 2
} else { // 같지않으면 바구니 마지막칸에 넣어줌
bucket.append(doll)
}
break // 인형을 뽑아 바구니에 넣었으니, 다음 moves 진행하기위해 탈출
}
}
return removeCnt
}
/*
[
[0,0,0,0,0],
[0,0,1,0,3],
[0,2,5,0,1],
[4,2,4,4,2],
[3,5,1,3,1]
]
4
2
4
*/
[
[0,0,0,0,0],
[0,0,1,0,3],
[0,2,5,0,1],
[4,2,4,4,2],
[3,5,1,3,1]
]
이렇게 봐야한다.
'Algorithm' 카테고리의 다른 글
[Programmers] 로또의 최고순위와 최저 순위 (0) | 2021.09.24 |
---|---|
[Programmers] 두 개 뽑아서 더하기 (0) | 2021.09.14 |
[프로그래머스] 카카오 인턴 - 키패드 누르기 (0) | 2021.09.06 |
[프로그래머스] 부족한 금액 계산 (0) | 2021.08.30 |
[Swift] 스위프트 자료구조, 알고리즘 공부하기 좋은 블로그 (0) | 2021.08.24 |
댓글