티스토리 뷰

코딩테스트

Lv.0 swift 순서 바꾸기

알롱도담쓰 2024. 3. 21. 22:05

문제 설명

정수 리스트 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
}

접근 방법

  1. 인덱스 n부터 마지막까지 한 번 추가하기
  2. 인덱스 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
최근에 올라온 글