티스토리 뷰
문제 설명
정수 리스트 num_list와 정수 n이 주어질 때, num_list를 n 번째 원소 이후의 원소들과 n 번째까지의 원소들로 나눠 n 번째 원소 이후의 원소들을 n 번째까지의 원소들 앞에 붙인 리스트를 return하도록 solution 함수를 완성해주세요.
제한 조건
2 ≤ num_list의 길이 ≤ 30
1 ≤ num_list의 원소 ≤ 9
1 ≤ n ≤ num_list의 길이
내 답안
import Foundation
func solution(_ num_list:[Int], _ n:Int) -> [Int] {
var result = [Int]()
for i in n..<num_list.count {
result.append(num_list[i])
}
for i in 0..<n {
result.append(num_list[i])
}
return result
}
접근 방법
- 인덱스 n부터 마지막까지 한 번 추가하기
- 인덱스 0번부터 n까지 뒤에 추가하기
(단순한 접근..이었다..)
다른 풀이
func solution(_ numList: [Int], _ n: Int) -> [Int] {
return Array((numList + numList)[n..<n + numList.count])
}
- numList를 두 번 이어붙이는 발상이 좋았다!
func solution(_ num_list:[Int], _ n:Int) -> [Int] {
let left = num_list.prefix(n)
let right = num_list.suffix(num_list.count - n)
return Array(right + left)
}
알게 된 것
코드의 간결성은 다른 풀이의 첫 번째 쪽이 훨씬 좋아 보이지만..
배열을 두 번 연결한 후에 슬라이스를 생성하기 때문에 메모리를 추가적으로 사용하는 게 아닌가 싶다
그래서 메모리적 관점에서는 내가 작성한 코드도 나빠 보이지 않기도 하고...
시간 복잡도 면에서도 두 코드 모두 O(N)이다
'코딩테스트' 카테고리의 다른 글
Lv.0 swift 할 일 목록 (0) | 2024.03.21 |
---|---|
Lv.0 swift 홀수 vs 짝수 (0) | 2024.03.21 |
Lv.0 swift n개 간격의 원소들 (0) | 2024.03.20 |
Lv.0 swift 수 조작하기 (0) | 2024.03.20 |
Lv.0 swift 문자열 앞의 n글자 (1) | 2024.03.19 |
최근에 올라온 글