안녕하세요. 오늘은 프로그래머스 프렌즈4블록 문제를 풀어보겠습니다.
이 문제는 구현 문제입니다.
제약조건에 의하여 문제에서 주어진 대로 풀어도 시간초과가 나지 않습니다.
있는 그대로 구현 해보도록 하겠습니다.
첫번째로 우선 지워질 블록을 선택합니다. 또, 지워질 블록이 없다면 탈출하는 조건도 만들어줍니다!
var canExit = true
for i in 0..<m-1 {
for j in 0..<n-1 {
let currentCharacter = arrayBoard[i][j]
if arrayBoard[i][j] == " " {
continue
}
if arrayBoard[i ][j+1] == currentCharacter &&
arrayBoard[i+1][j ] == currentCharacter &&
arrayBoard[i+1][j+1] == currentCharacter {
isDeleted[i ][j ] = 1
isDeleted[i+1][j ] = 1
isDeleted[i ][j+1] = 1
isDeleted[i+1][j+1] = 1
canExit = false
}
}
}
if canExit {
break
}
for i in 0..<m {
print(isDeleted[i])
}
두번째로 블록을 지워주고 블록을 아래로 정렬해줍니다.
// 블록 삭제
for i in 0..<m {
for j in 0..<n {
if isDeleted[i][j] == 1 {
arrayBoard[i][j] = " "
}
}
}
// 블록 드랍
for _ in 0..<m {
for i in 0..<m-1 {
for j in 0..<n {
if arrayBoard[i+1][j] == " " {
arrayBoard[i+1][j] = arrayBoard[i][j]
arrayBoard[i][j] = " "
}
}
}
}
이걸 반복해주고 탈출 후에 없어진 블록의 갯수를 카운트해주면 문제가 해결됩니다.
import Foundation
var isDeleted:[[Int]] = [[Int]]()
func solution(_ m:Int, _ n:Int, _ board:[String]) -> Int {
var arrayBoard:[[Character]] = [[Character]]()
for i in board {
arrayBoard.append(Array(i))
}
var answer = 0
while true {
isDeleted = [[Int]](repeating: [Int](repeating: 0, count: n), count: m)
// 지워질 블록 선택 & 탈출 조건
var canExit = true
for i in 0..<m-1 {
for j in 0..<n-1 {
let currentCharacter = arrayBoard[i][j]
if arrayBoard[i][j] == " " {
continue
}
if arrayBoard[i ][j+1] == currentCharacter &&
arrayBoard[i+1][j ] == currentCharacter &&
arrayBoard[i+1][j+1] == currentCharacter {
isDeleted[i ][j ] = 1
isDeleted[i+1][j ] = 1
isDeleted[i ][j+1] = 1
isDeleted[i+1][j+1] = 1
canExit = false
}
}
}
if canExit {
break
}
// 블록 삭제
for i in 0..<m {
for j in 0..<n {
if isDeleted[i][j] == 1 {
arrayBoard[i][j] = " "
}
}
}
// 블록 드랍
for _ in 0..<m-1 {
for i in 0..<m-1 {
for j in 0..<n {
if arrayBoard[i+1][j] == " " {
arrayBoard[i+1][j] = arrayBoard[i][j]
arrayBoard[i][j] = " "
}
}
}
}
}
for i in 0..<m {
for j in 0..<n {
if arrayBoard[i][j] == " " {
answer += 1
}
}
}
return answer
}
오늘은 여기까지이며, 질문이 있으시면 댓글로 남겨주세요!
좋은 하루 되세요😍
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 월간 코드 챌린지 시즌1 삼각 달팽이 with Swift (0) | 2022.01.29 |
---|---|
[프로그래머스] 월간 코드 챌린지 시즌2 2개 이하로 다른 비트 with Swift (0) | 2022.01.28 |
[프로그래머스] 위클리 챌린지 피로도 with Swift (0) | 2022.01.26 |
[프로그래머스] 탐욕법(Greedy) 큰 수 만들기 with Swift (0) | 2022.01.25 |
[프로그래머스] 정렬 H-Index with Swift (0) | 2022.01.24 |