๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] 2020 KAKAO BLIND RECRUITMENT ๊ธฐ๋‘ฅ๊ณผ ๋ณด ์„ค์น˜ํ•˜๊ธฐ

by Fomagran ๐Ÿ’ป 2021. 8. 13.
728x90
๋ฐ˜์‘ํ˜•

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๊ธฐ๋‘ฅ๊ณผ ๋ณด ์„ค์น˜

5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0],[1,1,1],[2,1,0],[2,2,1],[3,2,1],[4,2,1],[5,0,0],[5,1,0]] 5 [[0,0,0,1],[2,0,0,1],[4,0,0,1],[0,1,1,1],[1,1,1,1],[2,1,1,1],[3,1,1,1],[2,0,0,0],[1,1,1,0],[2,2,0,1]] [[

programmers.co.kr


Solution

 

1. ๊ธฐ๋‘ฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ ์ ํ•ฉํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.

 

๋ฐ”๋‹ฅ,๊ธฐ๋‘ฅ ์œ„,๋ณด์˜ ์œ„์ผ ๊ฒฝ์šฐ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

func checkRightPillars(x:Int,y:Int) -> Bool {
    //๋ฐ”๋‹ฅ,๊ธฐ๋‘ฅ ์œ„,๋ณด์˜ ์™ผ์ชฝ ์œ„์ผ ๊ฒฝ์šฐ
    if y == 0 || pillars[x][y-1] || papers[x][y]{
        return true
    }
    //๋ณด์˜ ์˜ค๋ฅธ์ชฝ ์œ„์ผ ๊ฒฝ์šฐ
    if x > 0 {
        if papers[x-1][y] {
            return true
        }
    }
    return false
}

 

2. ๋ณด๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ ํ•ฉํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.

 

๋ณด์˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์ด ๊ธฐ๋‘ฅ ์œ„์ผ ๊ฒฝ์šฐ๋‚˜ ์–‘์ชฝ์— ๋ณด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

func checkRightPapers(x:Int,y:Int,n:Int) -> Bool {
    //๋ณด์˜ ์™ผ์ชฝ์ด ๊ธฐ๋‘ฅ ์œ„์ผ ๊ฒฝ์šฐ
    if pillars[x][y-1] {
        return true
    }
    if x < n {
        //๋ณด์˜ ์˜ค๋ฅธ์ชฝ์ด ๊ธฐ๋‘ฅ ์œ„์ผ ๊ฒฝ์šฐ
        if pillars[x+1][y-1]{
            return true
        }
    }
    if x > 0 && x < n {
        //์–‘์ชฝ์— ๋ณด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ
        if papers[x-1][y] && papers[x+1][y]{
            return true
        }
    }
    return false
}

 

3. ๊ธฐ๋‘ฅ์ด๋‚˜ ๋ณด๋ฅผ ์‚ญ์ œํ•œ ํ›„ ๋ชจ๋“  ๊ธฐ๋‘ฅ๊ณผ ๋ณด๊ฐ€ ์ ํ•ฉํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.

 

๊ธฐ๋‘ฅ์ด๋‚˜ ๋ณด๋ฅผ ์‚ญ์ œํ•œ ํ›„ ๋ชจ๋“  ๊ธฐ๋‘ฅ๊ณผ ๋ณด๊ฐ€ ์ ํ•ฉํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ๋งŒ์•ฝ ํ•˜๋‚˜๋ผ๋„ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ด์ค˜ ๋ฌดํšจ์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

 

func checkRightStructure(n:Int) -> Bool {
    for paper in paperLocation {
        if !checkRightPapers(x: paper.0, y: paper.1,n: n){
            return false
        }
    }
    for pillar in pillarLocation {
        if !checkRightPillars(x: pillar.0, y: pillar.1) {
            return false
        }
    }
    return true
}

 

4. ๊ธฐ๋‘ฅ๊ณผ ๋ณด์˜ ์œ„์น˜๋ฅผ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ •๋ ฌ ํ›„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

   let result = pillarLocation.map{[$0.0,$0.1,0]} + paperLocation.map{[$0.0,$0.1,1]}
    return result.sorted { $0[0] == $1[0] ? $0[1] == $1[1] ? $0[2] < $1[2] : $0[1] < $1[1] : $0[0] < $1[0]
    }

Source Code

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€