๐ ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ํ์ด
โ๐ป ๋ฌธ์ ํ์ด github ๋งํฌ
๋ฌธ์ ์ค๋ช
์ ์ n, left, right๊ฐ ์ฃผ์ด์ง๋๋ค. ๋ค์ ๊ณผ์ ์ ๊ฑฐ์ณ์ 1์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ์ ํฉ๋๋ค.
- nํ n์ด ํฌ๊ธฐ์ ๋น์ด์๋ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
- i = 1, 2, 3, ..., n์ ๋ํด์, ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค.
- 1ํ 1์ด๋ถํฐ iํ i์ด๊น์ง์ ์์ญ ๋ด์ ๋ชจ๋ ๋น ์นธ์ ์ซ์ i๋ก ์ฑ์๋๋ค.
- 1ํ, 2ํ, ..., nํ์ ์๋ผ๋ด์ด ๋ชจ๋ ์ด์ด๋ถ์ธ ์๋ก์ด 1์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ญ๋๋ค.
- ์๋ก์ด 1์ฐจ์ ๋ฐฐ์ด์ arr์ด๋ผ ํ ๋, arr[left], arr[left+1], ..., arr[right]๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ง์๋๋ค.
์ ์ n, left, right๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ฃผ์ด์ง ๊ณผ์ ๋๋ก ๋ง๋ค์ด์ง 1์ฐจ์ ๋ฐฐ์ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ n ≤ 10^7
- 0 ≤ left ≤ right < n^2
- right - left < 10^5
์ ์ถ๋ ฅ ์
n | left | right | result |
3 | 2 | 5 | [3,2,2,3] |
4 | 7 | 14 | [4,3,3,3,4,4,4,4] |
๋ฌธ์ ํ์ด
๋์ ํ์ด
[ ์คํจ ]
import Foundation
func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
var arr = [Int]()
for i in 1...n {
if i > 1 {
arr += [Int](repeating:i, count:i-1)
}
arr += (i...n).map{ $0 }
}
return Array(arr[Int(left)...Int(right)])
}
ํ
์คํธ 1 ใ ํต๊ณผ (15.73ms, 33.4MB)
ํ
์คํธ 2 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 3 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 4 ใ ํต๊ณผ (1.54ms, 16.6MB)
ํ
์คํธ 5 ใ ํต๊ณผ (1.38ms, 16.6MB)
ํ
์คํธ 6 ใ ํต๊ณผ (147.63ms, 34.4MB)
ํ
์คํธ 7 ใ ํต๊ณผ (175.22ms, 35.6MB)
ํ
์คํธ 8 ใ ํต๊ณผ (143.03ms, 34.1MB)
ํ
์คํธ 9 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 10 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 11 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 12 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 13 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 14 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 15 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 16 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 17 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 18 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 19 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 20 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
๊ทธ๋ผ ๊ทธ๋ ์ง ์ด๋ ๊ฒ ํด์ ํ๋ฆฌ๊ฒ ๋?! ๋๊ฐ ๋ ๋ฒจ 1๋ ์๋๊ณ 2์ธ๋ฐ ๊ทธ์น.. ( 5๋ถ๋ง์ ํ๋ฆด๋ฆฌ๊ฐ ์์ด.. )
20๊ฐ์ ํ ์คํธ๋ฆฌ์คํธ ์ค 14๊ฐ์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ณด๊ณ ์๊ฐํ๋ค.
์ด ๋ฌธ์ ๋ ์ ์ฒด ๋ฐฐ์ด์ ๋ค ๋ง๋ค์ด์ ์๋ฅด๋ฉด ์๋๋ค๋ ๊ฒ์..
[ ์คํจ ]
import Foundation
func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
let left = Int(left)
let right = Int(right)
var answer = [Int]()
for i in left/n...right/n {
if i == left/n {
for j in left%n..<n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}else if i == right/n {
for j in 0...right%n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}else {
for j in 0..<n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}
}
return answer
}
ํ
์คํธ 1 ใ ํต๊ณผ (1.88ms, 33.3MB)
ํ
์คํธ 2 ใ ์คํจ (์๊ฐ ์ด๊ณผ)
ํ
์คํธ 3 ใ ํต๊ณผ (2.17ms, 35MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.03ms, 16.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.04ms, 16.5MB)
ํ
์คํธ 6 ใ ํต๊ณผ (2.01ms, 33.7MB)
ํ
์คํธ 7 ใ ํต๊ณผ (3.55ms, 34.9MB)
ํ
์คํธ 8 ใ ํต๊ณผ (1.89ms, 33.5MB)
ํ
์คํธ 9 ใ ํต๊ณผ (3.40ms, 34.4MB)
ํ
์คํธ 10 ใ ํต๊ณผ (2.00ms, 34.2MB)
ํ
์คํธ 11 ใ ํต๊ณผ (2.02ms, 33.9MB)
ํ
์คํธ 12 ใ ํต๊ณผ (1.78ms, 31.7MB)
ํ
์คํธ 13 ใ ํต๊ณผ (3.39ms, 33.5MB)
ํ
์คํธ 14 ใ ํต๊ณผ (1.79ms, 32.9MB)
ํ
์คํธ 15 ใ ์คํจ (11.94ms, 72.8MB)
ํ
์คํธ 16 ใ ์คํจ (14.23ms, 121MB)
ํ
์คํธ 17 ใ ์คํจ (15.56ms, 132MB)
ํ
์คํธ 18 ใ ์คํจ (126.34ms, 670MB)
ํ
์คํธ 19 ใ ์คํจ (71.53ms, 455MB)
ํ
์คํธ 20 ใ ์คํจ (96.93ms, 489MB)
left ๋ถํฐ right ๊น์ง์ ๋ฐฐ์ด์ ๋ง๋ค์ด์ ๋ฐ๋ก ์ถ๋ ฅํด๋ฒ๋ฆฌ๋๋ก ๋ฐ๊พธ์๋ค.
๊ทธ ์์ ๊ท์น์ด ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
ํด๋น 2์ฐจ์ ๋ฐฐ์ด์ 2์ฐจ์ ์ขํ (0, 0) ~ (n-1, n-1) ๋ก ๋์์ ๋,
( left/n, left%n ) ~ ( right/n, right%n ) ๊น์ง์ ๋ฐฐ์ด ๊ฐ์๋ง ์ฐพ์๋ด๋ฉด ๋์๋ค.
i ์ขํ์ j ์ขํ๊ฐ์ ๊ท์น์ด ์์๋ค. i ๊ฐ j ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค๋ฉด i+1์ i ๊ฐ j๋ณด๋ค ์๋ค๋ฉด j+1์ ๋ฐํํ๋ค.
ํ์ง๋ง, ์ด ๋, i ์ขํ๊ฐ left/n ์ด๊ฑฐ๋ right/n ์ผ ๋๋ j์ ๋ฒ์๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒ์ ๊ณ ๋ คํด์ผํ๋ค.
๊ทธ๋์ ๊ฐ๊ฐ์ if๋ฌธ์ผ๋ก ๋๋์ด for ๋ฌธ์ ๋ฒ์๋ฅผ ๋ฐ๊พธ์ด ์ฃผ์๋ค.
20๊ฐ ์ค 7๊ฐ์ ์คํจ!
๋ด๊ฐ ๊ณ ๋ คํ์ง ์์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ค๊ณ ์๊ฐํ๋ค.
left/n์ right/n๊ฐ ์ผ์นํ ๋๋ฅผ ๊ณ ๋ คํ์ง ์์๋ค.
[ ์ฑ๊ณต ]
import Foundation
func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
let left = Int(left)
let right = Int(right)
var answer = [Int]()
for i in left/n...right/n {
if left/n == right/n {
for j in left%n...right%n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}else if i == left/n {
for j in left%n..<n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}else if i == right/n {
for j in 0...right%n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}else {
for j in 0..<n {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}
}
return answer
}
ํ
์คํธ 1 ใ ํต๊ณผ (1.76ms, 33.5MB)
ํ
์คํธ 2 ใ ํต๊ณผ (1.98ms, 34.8MB)
ํ
์คํธ 3 ใ ํต๊ณผ (2.06ms, 34.9MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.03ms, 16.5MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.03ms, 16.4MB)
ํ
์คํธ 6 ใ ํต๊ณผ (1.85ms, 33.7MB)
ํ
์คํธ 7 ใ ํต๊ณผ (1.96ms, 35MB)
ํ
์คํธ 8 ใ ํต๊ณผ (1.90ms, 33.4MB)
ํ
์คํธ 9 ใ ํต๊ณผ (1.93ms, 34.6MB)
ํ
์คํธ 10 ใ ํต๊ณผ (1.95ms, 34.4MB)
ํ
์คํธ 11 ใ ํต๊ณผ (1.98ms, 33.9MB)
ํ
์คํธ 12 ใ ํต๊ณผ (1.75ms, 32MB)
ํ
์คํธ 13 ใ ํต๊ณผ (1.75ms, 33.5MB)
ํ
์คํธ 14 ใ ํต๊ณผ (1.70ms, 33MB)
ํ
์คํธ 15 ใ ํต๊ณผ (1.65ms, 32.2MB)
ํ
์คํธ 16 ใ ํต๊ณผ (1.81ms, 33MB)
ํ
์คํธ 17 ใ ํต๊ณผ (1.81ms, 33.1MB)
ํ
์คํธ 18 ใ ํต๊ณผ (1.98ms, 34.6MB)
ํ
์คํธ 19 ใ ํต๊ณผ (2.85ms, 33.5MB)
ํ
์คํธ 20 ใ ํต๊ณผ (1.67ms, 31.6MB)
left/n๊ณผ right/n ๊น์ง ๊ณ ๋ คํด์ ํธ๋ ์ฑ๊ณต!
์ด๋ฅผ ์ข ๋ ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํ๊ณ ์ถ์๋ค.
[ ์ ๋ฆฌ ]
func solution(_ n:Int, _ left:Int64, _ right:Int64) -> [Int] {
let left = Int(left)
let right = Int(right)
var answer = [Int]()
for i in left/n...right/n {
var x = 0
var y = n-1
if left/n == right/n { x = left%n; y = right%n }
else if i == left/n { x = left%n }
else if i == right/n { y = right%n }
for j in x...y {
i >= j ? answer.append(i+1) : answer.append(j+1)
}
}
return answer
}
๋!
๋ค๋ฅธ ์ฌ๋ ํ์ด
func solution(_ n: Int, _ left: Int64, _ right: Int64) -> [Int] {
return (left...right).map { max(Int($0) / n, Int($0) % n) + 1 }
}
ใ ใ ใ ์ด๊ฒ ๋ญ์ง.. ์ด๋ ๊ฒ ๊ฐ๋จํ ์ ๋ฆฌํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ฐ์์น๋ฉฐ ์กฐ์ฉํ ์ฌ๋ผ์ง๋๋ค..