์ž๋ฃŒ๊ตฌ์กฐ & ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] 1์ฐจ ๋น„๋ฐ€์ง€๋„

๊ธฐ๊ฐ€์ •ํ›ˆ 2023. 6. 8. 00:47

1. ๋ฌธ์ œ ๋งํฌ 

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

https://school.programmers.co.kr/learn/courses/30/lessons/17681

 

2. ์ฝ”๋“œ

func solution(_ n:Int, _ arr1:[Int], _ arr2:[Int]) -> [String] {
    var answer: [String] = []
    var count : Int = 0
    var str : String = ""
    
    func makeMap(arr: [Int]) -> [Int]{
        var mapArr : [Int] = []
        for i in arr{
            var tempArr : [Int] = []    // ํ•˜๋‚˜์”ฉ ๊ฒฐ๊ณผ๊ฐ’์„ ๋„ฃ๊ธฐ ์œ„ํ•ด ์ž„์‹œ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด
            var share : Int = i         // ๋ชซ
            var remain : Int = 0        // ๋‚˜๋จธ์ง€
            
            while share != 0{           //2๋กœ ๊ณ„์† ๋‚˜๋ˆŒ๊บผ์—ฌ์„œ ๋งˆ์ง€๋ง‰์—” 0์ด๋œ๋‹ค.
                remain = share % 2      // 2๋กœ ๋‚˜๋ˆ„๋ฉด 0,1๋กœ ๋‚˜๋จธ์ง€๊ฐ€ ๋‚˜์˜ด 
                share = share / 2       // ๊ณ„์† ๋‚˜๋ˆ ์•ผ ํ•ด์„œ
                tempArr.append(remain)   // remain ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐฐ์—ด์— ๋„ฃ์–ด์คŒ
            }
            
            if tempArr.count < n {          // 1,2(2),4(3),8(4),16(5),64(6)
                                            // ๋ฐฐ์—ด์•ˆ์— ๊ฐฏ์ˆ˜ ์„ธ์„œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„ 0์œผ๋กœ ์ฑ„์šฐ๊ธฐ
                for _ in 0..<n - tempArr.count{     // ๋ถ€์กฑํ•œ ๊ฐฏ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต ๋ฐฐ์—ด ๋’ค์—๋‹ค๊ฐ€ 0์ฑ„์šฐ๊ธฐ
                    tempArr.append(0)
                }
            }
            
            tempArr = tempArr.reversed()        // ๋ฐฐ์—ด ๊ฐ’์„ ๋ฐ˜์ „ ์‹œํ‚ค๊ธฐ

            mapArr.append(contentsOf: tempArr)
            
        }
        return mapArr
    }
    // ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํ•ด์„œ ๋ฐ˜ํ™˜ ๋ฐ›์€ ๋ฐฐ์—ด์„ ๊ฐ™์ด zip() ์ด์šฉํ•ด์„œ ๋Œ๋ ค์„œ ํ™•์ธ
    for (arr1,arr2) in zip(makeMap(arr: arr1), makeMap(arr: arr2)){
        count += 1          // ์นด์šดํŒ…
        if arr1 == 1 || arr2 == 1 {     // ๋‘˜์ค‘ ํ•˜๋‚˜๋ผ๋„ 1์ด๋ผ๋ฉด ๋ฒฝ
            str += "#"
        }else{              // ์•„๋‹์‹œ๋Š” ๋‘˜๋‹ค 0 ์ด๋ฏ€๋กœ  ๋นˆ์นธ
            str += " "
        }
        if count == n {         // n๊ฐœ์”ฉ ์ž˜๋ผ์•ผํ•ด์„œ
            answer.append(str)      // ์ •๋‹ต ๋ฐฐ์—ด์— ๋„ฃ๊ณ 
            count = 0       // ์นด์šดํŒ… 0์œผ๋กœ ์„ค์ •
            str = ""        // ๋ฌธ์ž์—ด ์ดˆ๊ธฐํ™”
        }
    }
    return answer
}

3.  ์ฝ”๋“œ ์„ค๋ช…

makeMap ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ arr1๊ณผ arr2๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ง„์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์ˆซ์ž๋ฅผ ๊ณ„์†ํ•ด์„œ 2๋กœ ๋‚˜๋ˆ„๊ณ , ๋‚˜๋จธ์ง€๋ฅผ ๋ฐฐ์—ด์— ์ €์žฅํ•˜์—ฌ ์ด์ง„์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด์ง„์ˆ˜์˜ ๊ธธ์ด๊ฐ€ n๋ณด๋‹ค ์ž‘์„ ๋•Œ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ฃผ๊ณ , ๋ฐฐ์—ด์„ ๋ฐ˜์ „์‹œ์ผœ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฐฐ์—ด์„ ๋™์‹œ์— ์ˆœํšŒํ•˜๊ธฐ ์œ„ํ•ด zip ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ๊ป˜ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ arr1 ๋˜๋Š” arr2์˜ ๊ฐ’์ด 1์ด๋ผ๋ฉด ๋ฒฝ์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ "#"์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

๋งค ์ˆœํšŒ๋งˆ๋‹ค ๋ฌธ์ž์—ด์„ str์— ์ €์žฅํ•˜๋Š” ์ด์œ ๋Š” ๊ฐ ์ˆซ์ž๋งˆ๋‹ค ๊ธธ์ด๊ฐ€ n์ธ ๋ฌธ์ž์—ด์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

count๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ฒฐ๊ณผ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ ํ›„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.