๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm๐Ÿฐ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Swift ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ ๋ˆ„์ ํ•ฉ

by Jouureee 2022. 5. 2.

๋ฌธ์ œ :

https://programmers.co.kr/learn/courses/30/lessons/92344

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํŒŒ๊ดด๋˜์ง€ ์•Š์€ ๊ฑด๋ฌผ

[[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5],[5,5,5,5,5]] [[1,0,0,3,4,4],[1,2,0,2,3,2],[2,1,0,3,1,2],[1,0,1,3,3,1]] 10 [[1,2,3],[4,5,6],[7,8,9]] [[1,1,1,2,2,4],[1,0,0,1,1,2],[2,2,0,2,0,100]] 6

programmers.co.kr

 

์ฐธ๊ณ  :

https://tech.kakao.com/2022/01/14/2022-kakao-recruitment-round-1/#%EB%AC%B8%EC%A0%9C-6-%ED%8C%8C%EA%B4%B4%EB%90%98%EC%A7%80-%EC%95%8A%EC%9D%80-%EA%B1%B4%EB%AC%BC

 

2022 ์นด์นด์˜ค ์‹ ์ž… ๊ณต์ฑ„ 1์ฐจ ์˜จ๋ผ์ธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ for Tech developers ๋ฌธ์ œํ•ด์„ค

์ง€๋‚œ 2021๋…„ 9์›” 11์ผ ํ† ์š”์ผ ์˜คํ›„ 2์‹œ๋ถ€ํ„ฐ 7์‹œ๊นŒ์ง€ 5์‹œ๊ฐ„ ๋™์•ˆ 2022 KAKAO BLIND RECRUITMENT 1์ฐจ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์—๋Š” ์ด 7๊ฐœ์˜ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐœ๋ฐœ ์–ธ์–ด๋Š” C++, Java, JavaScript, K

tech.kakao.com

 

๋ถ„์„ : 

๊ทธ๋ƒฅ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด 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
    
}

 

๊ฒฐ๊ณผ : 

๋Œ“๊ธ€