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

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์›”๊ฐ„ ์ฝ”๋“œ ์ฑŒ๋ฆฐ์ง€ 3 n^2 ๋ฐฐ์—ด ์ž๋ฅด๊ธฐ

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

 

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - n^2 ๋ฐฐ์—ด ์ž๋ฅด๊ธฐ

์ •์ˆ˜ n, left, right๊ฐ€ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ 1์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. nํ–‰ n์—ด ํฌ๊ธฐ์˜ ๋น„์–ด์žˆ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. i = 1, 2, 3, ..., n์— ๋Œ€ํ•ด์„œ, ๋‹ค์Œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. 1ํ–‰ 1์—ด๋ถ€

programmers.co.kr


Solution

 

1. ๋ฐฐ์—ด์— ์ˆซ์ž๊ฐ€ ์ฑ„์›Œ์ง€๋Š” ๊ทœ์น™์„ ํŒŒ์•…ํ•œ๋‹ค.

 

๋ฐฐ์—ด์— ์ˆซ์ž๊ฐ€ ์ฑ„์›Œ์ง€๋Š” ๊ทœ์น™์€ iํ–‰์— i๊ฐœ์˜ i๊ฐ€ ์ฑ„์›Œ์ง€๊ณ  ๊ทธ ๋‹ค์Œ i+1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด n์ด 10์ด๊ณ  i๊ฐ€ 5๋ผ๋ฉด 5๋ฒˆ์งธ ํ–‰์€ 5๊ฐ€ 5๊ฐœ๊ฐ€ ๋จผ์ € ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. -> [5,5,5,5,5]

 

๊ทธ๋ฆฌ๊ณ  6(5+1)๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. -> [5,5,5,5,5,6,7,8,9,10]

 

2. ์‹œ์ž‘๋˜๋Š” ํ–‰๊ณผ ์—ด, ๋๋‚˜๋Š” ํ–‰๊ณผ ์—ด์„ ๊ตฌํ•œ๋‹ค.

 

์ฃผ์–ด์ง„ left์™€ right๋ฅผ ํ†ตํ•ด์„œ ์ˆซ์ž๊ฐ€ ๋ช‡ ๋ฒˆ์งธ ํ–‰,๋ช‡ ๋ฒˆ์งธ ์—ด์—์„œ ์‹œ์ž‘๋˜๊ณ  ๋๋‚˜๋Š”์ง€ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

 

ํ–‰์€ n์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋˜๊ณ  ์—ด์„ n์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

    let startColumn:Int = Int(left)/n
    let endColumn:Int = Int(right)/n
    let startRow:Int = Int(left)%n
    let endRow:Int = Int(right)%n

 

3. ์‹œ์ž‘๋˜๋Š” ํ–‰๋ถ€ํ„ฐ ์—ด๊นŒ์ง€ 1์—์„œ ๊ตฌํ•œ ๊ทœ์น™์„ ์ ์šฉํ•œ๋‹ค.

 

๋จผ์ € numbers์— 1์—์„œ ์ ์šฉํ•œ ๊ทœ์น™๋Œ€๋กœ ์ˆซ์ž๋ฅผ ์ฑ„์›Œ์ค๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์‹œ์ž‘ ํ–‰์ด๋ผ๋ฉด ์‹œ์ž‘ ์—ด๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋„ฃ์–ด์ฃผ๊ณ  ๋๋‚˜๋Š” ํ–‰์ด๋ผ๋ฉด 0๋ถ€ํ„ฐ ๋๋‚˜๋Š” ์—ด๊นŒ์ง€ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

๊ทธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด numbers๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

 var answer:[Int] = []

    for i in startColumn...endColumn {
        var numbers:[Int] = Array(repeating: i+1, count:i+1)
        if i+1 < n {
            let tail:[Int] = Array(i+2...n)
            numbers.append(contentsOf:tail)
        }

        if startColumn == endColumn {
            return Array(numbers[startRow...endRow])
        }

        if i == startColumn {
            answer.append(contentsOf: Array(numbers[startRow...]))
            continue
        }

        if i == endColumn {
            answer.append(contentsOf: Array(numbers[0...endRow]))
            continue
        }
        answer.append(contentsOf: numbers)
    }

 

4. ๊ทœ์น™๋Œ€๋กœ ์ˆซ์ž๋ฅผ ๋„ฃ์€ answer๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

return answer

Source Code

 


P.S

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ๊ทธ๋ƒฅ left๋ถ€ํ„ฐ right๊นŒ์ง€ ํ–‰๊ณผ ์—ด์„ ๊ตฌํ•ด์„œ ์ฐจ๋ก€๋กœ ๋„ฃ์œผ๋ฉด ๋๋Š”๋ฐ... ์ข€ ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ–ˆ๋‹ค.

 

func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
    return (Int(left)...Int(right)).map { max($0 / n, $0 % n) + 1 }
}
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€