๋ฌธ์ :
https://programmers.co.kr/learn/courses/30/lessons/92344
์ฐธ๊ณ :
๋ถ์ :
๊ทธ๋ฅ ์๋ฌด ์๊ฐ ์์ด skill -> r1 ~ r2 -> c1 ~ c2๋ก 3์ค for๋ฌธ์ผ๋ก ํ๋ฉด ํจ์จ์ฑ ์ ๋ก๊ฐ ๋จ๋ ๊ฒ์ ๋ณผ ์ ์๋ค ใ ใ
๋์ ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๊ฐ์ด ์๋์ ์นด์นด์ค ํ์ด๋ฅผ ์ฐธ๊ณ ํ๋ค ..
๋์ ํฉ์ ์ด์ฉํด ๊ตฌ๊ฐํฉ์ ๋น ๋ฅด๊ฒ ๊ตฌํ ์ ์๋ค๋ ์ ์ ์๊ณ ์์๋๋ฐ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ณด๋ DFS, BFS ๋ง ์๊ฐ ๋ ๋ฟ ๊ตฌ๊ฐํฉ์ด ๋ ์ค๋ฅด์ง ์์๋ค. ์์ ์นด์นด์ค ํด์ค์ ๋ณด๋ ๊ฒ์ด ์์ฃผ ๋ง์ด ๋์์ด ๋์๋ค !!
๊ตฌํ๊ณ ์ ํ๋ 2์ฐจ์ ๊ตฌ๊ฐ์ 3์ค for๋ฌธ(skill, ํ, ์ด)๋ก ๋๋ ๊ฒ์ด ์๋๋ผ ==> ์๊ฐ ์ด๊ณผ
๊ตฌ๊ฐ์ ์์, ๋ ๊ฐ์ n๋งํผ์ ๋ณํ๋ฅผ (n, -n, n, -n) ๋งํผ ๋งค ์คํฌ๋ง๋ค ๋์ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ์ ๋ํด์ ์ ํ -> ์๋ ํ์ผ๋ก ๋์ ํฉ
๊ฐ ์ด์ ๋ํด์ ์ผ์ชฝ ์ด -> ์ค๋ฅธ์ชฝ ์ด๋ก ๋์ ํฉ ํ๊ฒ ๋๋ฉด ๊ฐ ์นธ๋ง๋ค ๊ฐ์ ๋ณํ๋์ด ๋์ถ๋๋ค !!
๋ฐ๋ผ์ ์๋ณธ ๋ฐฐ์ด์ธ board๊ฐ๊ณผ ๋ณํ ๊ฐ์ ๋ํด 0์ด์์ธ ๊ฑด๋ฌผ๋ง ์นด์ดํธ ํ๋ค.
Swift ์ฝ๋ :
func solution(_ board:[[Int]], _ skill:[[Int]]) -> Int {
var cnt = 0
var arr = Array(repeating: Array(repeating: 0, count: board[0].count + 1), count: board.count + 1)
for i in skill {
let type = i[0] == 2 ? true : false
let r1 = i[1]
let c1 = i[2]
let r2 = i[3]
let c2 = i[4]
let degree = type == true ? i[5] : -i[5]
arr[r1][c1] += degree
arr[r2+1][c2+1] += degree
arr[r2+1][c1] -= degree
arr[r1][c2+1] -= degree
}
for i in 1..<arr.count { // row -> botton
for j in 0..<arr[0].count {
arr[i][j] += arr[i-1][j]
}
}
for i in 1..<arr[0].count { // left -> right
for j in 0..<arr.count{
arr[j][i] += arr[j][i-1]
}
}
for i in 0..<board.count { // arr(๋ณํ๋) + board(์ด๊ธฐ๊ฐ)
for j in 0..<board[i].count {
arr[i][j] += board[i][j]
if arr[i][j] > 0 { cnt += 1 }
}
}
return cnt
}
๊ฒฐ๊ณผ :
'Algorithm๐ฐ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] Swift ์๋ฌผ์ ์ ์ด์ 2020 kakao (0) | 2022.05.13 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] Swift ์คํ์ฑํ ๋ฐฉ 2019 kakao (0) | 2022.05.02 |
[ํ๋ก๊ทธ๋๋จธ์ค] C++ ๋์คํฌ ์ปจํธ๋กค๋ฌ (0) | 2022.04.22 |
[ํ๋ก๊ทธ๋๋จธ์ค] Swift 2022 kakao ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ (0) | 2022.04.19 |
[ํ๋ก๊ทธ๋๋จธ์ค] Swift ์นด์นด์ค 2022 k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ implementation (0) | 2022.04.15 |
๋๊ธ