[Programmers] n์ง„์ˆ˜ ๊ฒŒ์ž„

2022. 2. 6. 16:05ใ†Algorithm

๋ฌธ์ œ ๐Ÿ‘‰ https://programmers.co.kr/learn/courses/30/lessons/17687

 

๋ฌธ์ œ ์„ค๋ช…

ํŠœ๋ธŒ๊ฐ€ N์ง„์ˆ˜ ๊ฒŒ์ž„์„ ํ•˜๋Š”๋ฐ ํŠœ๋ธŒ ์ˆœ์„œ์— ๋งํ•ด์•ผ ํ•˜๋Š” ์ˆซ์ž๋“ค์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๊ฒŒ์ž„ ๊ทœ์น™์€ ๋ฌธ์ œ์— ์ž์„ธํžˆ ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค. 

๋ฌธ์ œ ํ’€์ด

๋ชจ๋“  ์ˆซ์ž ๊ฒฐ๊ณผ๊ฐ’์„ ๊ฐ€์ง„ string ๋ฐฐ์—ด์„ ๊ตฌํ•˜๊ณ  ๊ทธ ์ค‘์—์„œ ํŠœ๋ธŒ์˜ ์ฐจ๋ก€์— ๋งํ•  ์ˆซ์ž๋“ค์„ ๋ฝ‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ ๋‘๊ฐ€์ง€๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค!!

 

1. N์ง„์ˆ˜ ๋ณ€ํ™˜ ๋ฐฉ๋ฒ•

2. for๋ฌธ ๋Œ๊ธฐ โ†’ +1์ด ์•„๋‹ˆ๋ผ +n๋งŒํผ ๋Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. (ํŠœ๋ธŒ์˜ ์ˆœ์„œ๋Š” +์‚ฌ๋žŒ์ˆ˜๋งŒํผ ๋Œ์•„์˜ค๊ธฐ ๋•Œ๋ฌธ)

 

1๋ฒˆ์€ swift์˜ radix ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. (ํ•ญ์ƒ ๊ตฌํ˜„ํ–ˆ์—ˆ๋Š”๋ฐ ์˜ค๋Š˜ ์ฒ˜์Œ ์•” ใ…Žใ…Ž,,)

๋ณ€ํ™˜ํ•  ์ˆ˜์™€ ์ง„ ์ˆ˜๋ฅผ ์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

uppercase๋Š” optional ํŒŒ๋ผ๋ฏธํ„ฐ์ธ๋ฐ 11์ง„์ˆ˜์ด์ƒ๋ถ€ํ„ฐ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ํ‘œํ˜„๋˜๋Š” ์ˆซ์ž๋“ค์˜ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. 

let target: Int = 3
let n: Int = 2

let result = String(target, radix: n, uppercase: true)
print(result)

// 11

 

2๋ฒˆ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด for๋ฌธ์„ ๋Œ๋ฉฐ ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์ด์šฉํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

n, n+2, n+4, n+6 ์ผ ๊ฒฝ์šฐ

2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋กœ ํŒ๋‹จํ•˜์—ฌ ์ˆซ์ž๋“ค์„ ๋ฝ‘์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๋ฌธ์ œ์˜ ํ’€์ด ์•„๋‹˜!!

for (i,num) in totalNumber.enumerated() {
    if i % 2 == 1 {
        result.append(num)
        if result.count == t {
            break
        }
    }
}

 ์ €๋Š” ์ด ํ’€์ด๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  stride๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!!

stride

stride(from: A, to: B, by: C) ๋ผ๊ณ  ํ•˜๋ฉด 

A๋ถ€ํ„ฐ B๊นŒ์ง€ C๋งŒํผ ๋”ํ•˜๋ฉด์„œ ๊ฐˆ๊ฑฐ์•ผ! ๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. 

์ด ๋•Œ B๋Š” ํฌํ•จํ•˜์ง€ ์•Š๊ณ  B-1 ๊นŒ์ง€ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

for i in stride(from: 0, to: 10, by: 2) {
    print(i)
}

// 0 
// 2
// 4
// 6
// 8

์ฝ”๋“œ

๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ for๋ฌธ

func changeRadix(_ n: Int, _ target: Int) -> String {
    return String(target, radix: n, uppercase: true)
}
func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
    let total: Int = t * m
    var totalNumber: String = ""
    var result: String = ""
    for i in 0..<total {
        totalNumber.append(changeRadix(n, i))
    }
    for (i,num) in totalNumber.enumerated() {
        if i % m == (p-1) {
            result.append(num)
            if result.count == t {
                break
            }
        }
    }
    
    return result
}

stride ์—ฐ์‚ฐ์„ ์ด์šฉํ•œ for๋ฌธ

func changeRadix(_ n: Int, _ target: Int) -> String {
    return String(target, radix: n, uppercase: true)
}
func solution(_ n:Int, _ t:Int, _ m:Int, _ p:Int) -> String {
    let total: Int = t * m
    var totalNumber: String = ""
    var result: String = ""
    for i in 0..<total {
        totalNumber.append(changeRadix(n, i))
    }
    for i in stride(from: (p-1), to: (p-1) + m * t, by: m) {
        let index = totalNumber.index(totalNumber.startIndex, offsetBy: i)
        result.append(totalNumber[index])
        print(i)
    }
    
    return result
}

 

๋ฐ˜์‘ํ˜•