[ํ๋ก๊ทธ๋๋จธ์ค] ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์
<๋ฌธ์ >
<์ ๋ต์ง๊ธฐ>
ใ ใ ๋ฌธ์ ๊ฐ ๋๊ธธ๋ค.๐ ๋ฌธ์ ์์ ์ํค๋๋๋ก ํฌ๋ ์ธ์ ์์น๋ฅผ ์ฐพ๊ณ , ํฌ๋ ์ธ์ ์ญ ๋ด๋ ธ์๋ ์ง์ ์ธํ์ด ์๋ค๋ฉด ๋ฐ๊ตฌ๋์ ์ฎ๊ฒจ์ ์ ์ผ ์์์๋ ์ธํ๊ณผ ๊ฐ์ ์ธํ์ด๋ฉด ๋๊ฐ๋ฅผ ํฐํธ๋ฆฌ๋ฉด ๋๋ค. ๊ทผ๋ฐ ๋ฌธ์ ๋.. ์ฃผ์ด์ง๋ board๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ธํ์ ์ง์ด์ฌ๋๋, ํด๋น ๋ผ์ธ์ด ๋น์ด์๋์ง ์ฒดํฌํ๊ธฐ๊ฐ ์ข ์ ๋งคํด์ง๋ค. board[ํ][์ด]๋ก ๋ฐ๋ก ์ ๊ทผํ๊ธฐ๊ฐ ์ข.. ๐ญ ๊ทธ๋์ ๋๋ board๋ฅผ ์ข ๋ ์ฝ๊ฒ ๋ณด๊ธฐ์ํด ์กฐ๊ธ ํ์ ์์ผ์ ์๋ก์ด dolls๋ก ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค. ์๋์ฒ๋ผ ๋๋ฆฌ๋ฉด, ํด๋น๋ผ์ธ์ด ๋น์๋์ง์ ์ ์ผ ์์์๋ ์ธํ์ ๊ฐ์ ธ์ค๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ด๋ค!
<์ฝ๋>
func solution(_ board:[[Int]], _ moves:[Int]) -> Int {
var dolls = Array(repeating: Array(repeating: 0, count: board[0].count), count: board.count)
var basket: [Int] = []
var result = 0
for (i, x) in board.enumerated() {
for (j, y) in x.enumerated() {
dolls[j][i] = y
}
}
for move in moves {
let realX = move-1
let notEmptyCount = dolls[realX].filter { $0 != 0 }.count
if notEmptyCount == 0 { continue }
let realY = dolls[realX].count - notEmptyCount
let curDoll = dolls[realX][realY]
dolls[realX][realY] = 0
if basket.count > 0 && curDoll == basket[basket.count-1] {
result += 2
basket.popLast()
} else {
basket.append(curDoll)
}
}
return result
}
<Lesson Learned>
์ค๋๋ง์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ฅผ ํ์๋ค ใ ใ ์ฌ๋ฐ๊ตฐ ๐ ๊พธ์คํ ํ์ด์ผ๊ฒ ๋๊ฑธ!? ์ด๋ฒ์ ๋ฐฐ์ด๊ฒ์ค ํ๋๋ ๋ฐฐ์ด์์ popLost()๋ฅผ ํ๋ฉด ๋ง์ง๋ง element๋ฅผ ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ ์ด๋ค. ์๋๋ array.remove(at: array.count-1) ๋ฅผ ์ฌ์ฉํด์ ์ง์ ์๋๋ฐ.. ๊ตณ์ด ๊ทธ๋ดํ์๊ฐ ์์๋ค! ใ ใ ๋ค๋ฅธ ์ฌ๋๋ค์ board๋ฅผ ๋๋ฆฌ์ง ์๊ณ ํ๊ธด ํ๋๋ฐ.. ์๋ฌด๋๋ ๊ฐ์ธ์ ์ผ๋ก๋ ์ด๋ ๊ฒ ๋๋ ค์ ์ฝ๊ฒ ๊ตฌํํ๋๊ฒ ์ข์ ๊ฒ ๊ฐ๋ค ๐
์ถ์ : ํ๋ก๊ทธ๋๋จธ์ค ํฌ๋ ์ธ ์ธํ๋ฝ๊ธฐ ๊ฒ์