ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - n์ง„์ˆ˜ ๊ฒŒ์ž„(Swift)

2022. 10. 18. 11:51ใ†ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-Swift

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - n์ง„์ˆ˜ ๊ฒŒ์ž„(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

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

 

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

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

programmers.co.kr

 

 

 ๋‚˜์˜ ํ’€์ด

 

 

๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ "ํ˜„์žฌ์˜ turn์„ ์‚ฌ๋žŒ์˜ ์ˆซ์ž๋กœ ๋‚˜๋ˆ ์„œ ๋–จ์–ด์ง€๋Š” ๋‚˜๋จธ์ง€๊ฐ€ ์ˆœ์„œ์™€ ๊ฐ™๋‹ค๋ฉด ๊ฒฐ๊ณผ๊ฐ’์— ๋„ฃ๋Š”๋‹ค"๋Š” ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๋Š”๋ฐ๋Š” ์˜ค๋ž˜๊ฑธ๋ฆฌ์ง€ ์•Š์•˜์ง€๋งŒ, ์‚ฌ๋žŒ์˜ ์ˆœ์„œ์™€ ์‚ฌ๋žŒ ์ˆ˜๊ฐ€ ๊ฐ™์„ ๋•Œ๋Š” ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ๊ฒฝ์šฐ์ง€๋งŒ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— else if๋กœ ๋นผ๋Š” ๋กœ์ง์„ ์ƒ๊ฐํ•˜๋Š”๋ฐ๋Š” ์กฐ๊ธˆ ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ์ด ์ฝ”๋“œ๋Š” ๋งˆ์ง€๋ง‰ ์ค„์— return ""๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ ์ง€ ๋ชจ๋ฅด๊ฒŒ ์ข‹์ง€ ์•Š์€ ์ฝ”๋“œ๋ผ๋Š” ๋Š๋‚Œ์ด ์˜จ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ดค๋‹ค.

 

func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
    var turn = 1
    var ans = ""
    let arr = (0..<t*m).map{ String($0, radix: n).uppercased() }
    for x in arr {
        for j in x { 
            if turn % m == p {
                ans.append(j)
                if ans.count == t {
                    return ans
                }
            } else if p == m && turn % p == 0 {
                ans.append(j)
                if ans.count == t {
                    return ans
                }
            }
            turn += 1
        }    
    }
    return ""
}

 

 ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด

 

๋‚ด ์ฝ”๋“œ์™€ ๋น„๊ตํ•ด ๋ดค์„ ๋•Œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ณ  ์ง๊ด€์ ์ด๋‹ค.

 

๋‚˜๋Š” ์Œ“์—ฌ๊ฐ€๋Š” answer์˜ ์นด์šดํŠธ๊ฐ€ m*t์ธ count๋ณด๋‹ค ์ž‘์„๋•Œ ๊นŒ์ง€ while๋ฌธ์„ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•„๋‹Œ, answer.count == t๊ฐ€ ๋˜์—ˆ์„ ๋•Œ ๋ฆฌํ„ด์„ ํ–ˆ๋‹ค. ์ฆ‰ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ์„ answer์— ๋„ฃ์—ˆ๊ณ  ์•„๋ž˜ ํ’€์ด์˜ ์‚ฌ๋žŒ์€ ๋จผ์ € ์ธ์›์ˆ˜๋งŒํผ answer์— ์ถ”๊ฐ€๋ฅผ ํ•ด์ค€ ๋’ค stride๋ฅผ ํ†ตํ•ด ์ˆœ์„œ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ์„ ์ถ”์ถœํ•˜๊ณ , reduceํ•ด์„œ ํ’€์ด๋ฅผ ํ–ˆ๋‹ค.

 

func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
    var ans:[String] = []
    let count = m*t
    var number = 0
    while ans.count < count {
        ans += String(number, radix: n).map{ $0.uppercased() }
        number += 1
    }
    
    return stride(from: p-1, to: count, by: m).reduce("", {$0 + ans[$1]})
}

 

 ํ”ผ๋“œ๋ฐฑ

 

stride๋Š” ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๋‹จ map์ด๋‚˜ reduce์ฒ˜๋Ÿผ ํ˜• ๋ณ€ํ™˜์„ ํ™•์‹คํ•˜๊ฒŒ ํ•˜๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.)