다차원 배열 문제를 해결할 때 주의할 점은 배열이 어떻게 구성되어야 하는지 유심히 봐야합니다
다음과 같이 주어진 다차원 배열은 문제를 쉽게 해결하기 위해 배열 재구성을 해야할 필요가 있습니다.
[1, 0, 0, 0, 0],
[2, 0, 0, 0, 0],
[2, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[3, 0, 0, 0, 0]]
- 1 번째 칸에는 [1, 2, 2, 1, 3] 인형들이 들어있습니다.
- 이때 [1, 1, 1, 1] 으로 인형을 뽑게 된다면 1번 칸에 인형들을 4번 뽑아야 하기 때문에 다음과 같이 배열을 재구성시키면 해결하기 쉬워집니다.
1번째 배열: [1, 2, 2, 1, 3]
2번째 배열: [0, 0, 0, 0, 0]
3번째 배열: [0, 0, 0, 0, 0]
4번째 배열: [0, 0, 0, 0, 0]
즉 다음과 같이 배열을 재구성합니다.
var arr: [[Int]] = board
for i in 0..<board.count {
for j in 0..<board.count {
arr[i][j] = board[j][i]
}
}
추가로 주의할점
이 문제는 담은 인형들 중에서 2개 연속된 인형이 존재하면 연속되는 인형들이 없을때까지 해당 인형들을 없애야 합니다.
코드
import Foundation
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
var arr: [[Int]] = board
for i in 0..<board.count {
for j in 0..<board.count {
arr[i][j] = board[j][i]
}
}
arr = arr.map { $0.filter { $0 != 0 } }
var basket: [Int] = []
var count = 0
for i in moves {
if !arr[i-1].isEmpty {
basket.append(arr[i-1].removeFirst())
}
while basket.count >= 2 && basket[basket.count-2] == basket[basket.count-1] {
basket.removeLast(2)
count += 2
}
}
return count
}
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 - 다트 게임 (카카오 블라인드 채용) (0) | 2024.09.26 |
---|---|
프로그래머스 - 실패율 2019 KAKAO BILND RECRUITMENT (카카오) (0) | 2024.09.15 |
프로그래머스 - 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴쉽) (0) | 2024.09.14 |
프로그래머스 - 성격 유형 검사하기 (카카오 인턴쉽) (0) | 2024.09.11 |
프로그래머스 - 키패드 누르기 (2022 카카오 인턴) (2) | 2024.09.11 |