2022. 10. 18. 20:29ใํ๋ก๊ทธ๋๋จธ์ค-Swift
ํ๋ก๊ทธ๋๋จธ์ค - ํ๋ ์ฆ4๋ธ๋ก(Swift)
๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/17679
๋์ ํ์ด
์ง๊ธ๊น์ง ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๊ฐ์ฅ ๊ธด ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ ๊ฐ๋ค.
๋งค๋ฒ ์๊ฐํ์ง๋ง ์ฝ๋๊ฐ ๊ธธ ์๋ก ์ฝ๋๋ฅผ ์ ์ง์ง ๋ชปํ๋ค๊ณ ๋๋ผ๊ณ ์ด๋ฒ์ ์์ฑํ ์ฝ๋๋ ๋ฌธ์ ๋ฐ์ -> ๋ฌธ์ ํด๊ฒฐ -> ๋ฌธ์ ๋ฐ์ -> ๋ฌธ์ ํด๊ฒฐ ์ ์์๋ฅผ ๋ฐ๋ณตํจ์ผ๋ก์จ ํ์๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ ์ฝ๋๊ฐ ๋์๋ค๊ณ ์๊ฐํ๋ค.
๊ทธ๋๋ ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ธฐ ์ ์ ๋ด๊ฐ ์ด ์ฝ๋๋ฅผ ๋ณต๊ธฐํด๋ณธ๋ค.
checkํจ์๋ 2๊ฐ์ง ์ญํ ์ ํ๋ค.
1. Boolํ์ ์ Flag๋ฅผ ์ ๋ฌํจ์ผ๋ก์จ ๋ฉ์ถ์ง ๊ณ์ํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
2. Flag๊ฐ true๊ฐ ๋์ด ๊ณ์ ์งํํ๋ค๋ฉด(4์นธ์ด ๋์ผํ ๊ฒ ์กด์ฌํ๋ค๋ฉด) ์ธ๋ถ์ ๋ฐฐ์ด arr์ check๋ฅผ ํตํด ์ง์ด๋ฐฐ์ด bor๋ฅผ ์ ๋ฌํด์ค๋ค.
ํต์ฌ์ i์ j๋ฅผ ๋ ๋ m-1, n-1๊น์ง๋ง ๋๋ ๊ฒ์ธ๋ฐ ์ด๋ ์ธ๋ฑ์ค๊ฐ ์ด๊ณผ๋ ๋ถ๋ถ์ ๋ํด์๋ ๊ฒ์ฌํ์ง ์๋๋ก ํ๋ฉฐ answer์ ๋ฑ๋ก๋ ์ธ๋ฑ์ค๋ค์ ์์๊ฐ๋ง ์ ์ฅ์ด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ค์ for๋ฌธ ๋๋ฆฌ๋ฉด์ ์ฃผ๋ณ์ 4์นธ์ ๊ณต๋ฐฑ์ผ๋ก ๋๋ฉด ์ค๋ณต๋๋ ๋ถ๋ถ๋ค์ ๊ณ ๋ คํด์ ์ ๋ถ ์ง์ธ ์ ์๋ค.
moveํจ์๋ฅผ ์์ฑํ๋๋ฐ์๋ ๋ค๋ฅธ ์ฌ๋์ ์ ๊ทผ์ ์ฐธ๊ณ ํ๋ค.
์ด์ ํ์ํ ๋ ์์์๋ถํฐ ํ์ํ๋ฉด ๊ณต๋ฐฑ์ ๋ฐ๊ฒฌํ ๋ ๊ฐ์ ๋ก๊ฒจ์ฃผ๊ณ ๋ ์์ ๊ฒ๋ค๋ ๋ค ๋ก๊ฒจ์ค์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ ์๋์๋ถํฐ ํ์ํ๋ ๊ฒ์ด ํจ์ฌ ์์ํ๋ค.
์๋์๋ถํฐ ํ์ํ๋ฉด์ ๊ณต๋ฐฑ์ผ ๋๋ emptyCount๋ฅผ 1์ฆ๊ฐ์ํค๊ณ ๊ณต๋ฐฑ์ด ์๋๋ฉด์ emptyCount๊ฐ 0์ด ์๋๋๋ ์ธ๋ฑ์ค์ emptyCount๋ฅผ ๋ํด์ ๋์ฒดํด์ฃผ๋ฉด ๋๋ค.
์ด๊ฒ์ ๊ฒ true, false๋ฅผ ๋จ๋ฐํ๋ฉด์ ๋ฌธ์ ๋ ํ์๋ค๋ ์ ์์ ์ค์ค๋ก์๊ฒ ์นญ์ฐฌ์ ํ์ง๋ง, ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ๋ค๋ ์ ์์ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ๊ฐ์ ํ ์ ์ ์ฐพ๋๋ค.
func solution(_ m:Int, _ n:Int, _ board:[String]) -> Int {
var arr = board.map{ $0.map{String($0) }}
var cnt = 0
func check(_ array: [[String]]) -> Bool {
var Flag = false
var bor = array
var answer: [(Int, Int)] = []
func isRemove(_ i: Int, _ j: Int) -> Bool {
if bor[i][j] != "" && bor[i][j] == bor[i][j+1] && bor[i][j] == bor[i+1][j] && bor[i][j] == bor[i+1][j+1]{
return true
}
return false
}
for i in 0..<m-1 {
for j in 0..<n-1 {
if isRemove(i, j) {
answer.append((i, j))
}
}
}
for (i, j) in answer {
Flag = true
bor[i][j] = ""
bor[i][j+1] = ""
bor[i+1][j] = ""
bor[i+1][j+1] = ""
}
if Flag {
arr = bor
return true
} else {
return false
}
}
func move(_ arr: [[String]]) -> [[String]] {
var moveArr = arr
for i in 0..<n {
var emptyCount = 0
for j in stride(from: m-1, to: -1, by: -1) {
if moveArr[j][i] != "" {
if emptyCount != 0 {
moveArr[j+emptyCount][i] = moveArr[j][i]
moveArr[j][i] = ""
}
} else {
emptyCount += 1
}
}
}
return moveArr
}
while true {
if check(arr) {
arr = move(arr)
} else {
break
}
}
for i in 0..<m {
for j in 0..<n {
if arr[i][j] == "" {
cnt += 1
}
}
}
return cnt
}
๋ค๋ฅธ ์ฌ๋์ ํ์ด
board์, temp ๋ฐฐ์ด์ ๋ถ๋ฆฌ์์ผ์ ์ค๋ณต์ ๋ํด์ ์ฒ๋ฆฌํ ์ ๊ณผ isChanged๋ฅผ ํตํด์ ๋ฐฐ์ด์ 4์นธ์ ๊ฐ์ด ์์๋ ํ๋ฒ ๋ while๋ฌธ์ ๋ ์ ์๊ฒ ํ ์ ์ด ์ธ์๊น์๋ค.
๊ทธ๋ฆฌ๊ณ ํจํด๋งค์นญ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ ์ธ๋ฑ์ค ๋ฒ์์ ๋ํด ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์์๊ณ , guard๋ฌธ์ผ๋ก ์ด๊ฑฐํจ์ผ๋ก์จ ๋ก์ง์ ํจ์ฌ ๋จ์ํ ์์ผฐ๋ค.
import Foundation
// ์ฌ๊ฐํ ์์ญ์ด ๋ชจ๋ ๊ฐ์์ง ํ์ธ
func square(_ i: Int, _ j: Int, _ ch: String, _ m: Int, _ n: Int, _ board: [[String]]) -> Bool {
let squareIndex = [(i, j), (i, j+1), (i+1, j), (i+1, j+1)]
for (r, c) in squareIndex {
guard (0..<m) ~= r, (0..<n) ~= c, ch == board[r][c] else { return false }
}
return true
}
// ๋น ๋ธ๋ญ์ ์ ๊ฑฐ
func removeBlank(_ arr: [[String]], _ m: Int, _ n: Int) -> [[String]] {
var temp = arr
for i in 0..<n {
var emptyCount = 0
for j in stride(from: m-1, to: -1, by: -1) {
if temp[j][i] != "-" {
if emptyCount != 0 {
temp[j+emptyCount][i] = temp[j][i]
temp[j][i] = "-"
}
} else {
emptyCount += 1
}
}
}
return temp
}
func solution(_ m:Int, _ n:Int, _ board:[String]) -> Int {
var board = board.map{ $0.map{ String($0)} }
var cnt = 0
var isChanged = true
while isChanged {
var temp = board
isChanged = false
for i in 0..<m {
for j in 0..<n where board[i][j] != "-" {
if square(i, j, board[i][j], m, n, board) {
for (i, j) in [(i, j), (i, j+1), (i+1, j), (i+1, j+1)] {
if temp[i][j] != "-" {
cnt += 1
temp[i][j] = "-"
}
}
isChanged = true
}
}
}
board = removeBlank(temp, m, n)
}
return cnt
}
'ํ๋ก๊ทธ๋๋จธ์ค-Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค - ์ฐ์ ๋ถ๋ถ ์์ด ํฉ์ ๊ฐ์ (0) | 2022.10.20 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค - ๋ ๋ฐ๋จน๊ธฐ(Swift) (0) | 2022.10.19 |
ํ๋ก๊ทธ๋๋จธ์ค - ํผ๋ก๋(Swift) (0) | 2022.10.18 |
ํ๋ก๊ทธ๋๋จธ์ค - n์ง์ ๊ฒ์(Swift) (0) | 2022.10.18 |
ํ๋ก๊ทธ๋๋จธ์ค - k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2022.10.18 |