[Swift] ํ๋ก๊ทธ๋๋จธ์ค ์๊ฐ ์ฝ๋ ์ฑ๋ฆฐ์ง 3 n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ
Problem
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 }
}