문제
프로그래머스 / n^2 배열 자르기
1) 문제 풀이
func solution(_ n:Int, _ left: Int64, _ right: Int64) -> [Int] {
var answer: [Int] = []
for i in 1...n {
var arr: [Int] = []
arr.append(contentsOf: i...n)
if arr.count < n {
let count = n - arr.count
arr = Array(repeating: i, count: count) + arr
}
answer = answer + arr
}
return Array(answer[Int(left)...Int(right)])
}
결과

2) 코드 개선
⚠️ 문제점 요약
n의 범위는 최대 10^7, 즉 1억 원소(10^7 * 10^7)는 만들 수도 없고, 저장할 수도 없음
- 현재 코드는
n*n 배열을 전부 만들어서 붙이려고 시도
answer = answer + arr처럼 매 루프마다 +로 배열을 누적하면 시간 복잡도는 O(n^2)
✅ 개선 포인트
func solution(_ n: Int, _ left: Int64, _ right: Int64) -> [Int] {
var result: [Int] = []
for k in left...right {
let row = Int(k / Int64(n))
let col = Int(k % Int64(n))
result.append(max(row, col) + 1)
}
return result
}
결과
