[Swift] - Inversion Sequence

Shawn·2021년 4월 13일
0

SwiftAlgo

목록 보기
7/12

Swift 로 배우는 알고리즘


1. 문제 설명

1부터 n 까지 숫자가 무작위로 (중복없이) 정렬된다.
각 숫자 앞에 있는 숫자들 중 자신보다 큰 숫자의 개수 로 이루어진 정렬이 주어진다.
이를 Inversion Sequence 라 한다.

예로 4 8 6 2 5 1 3 7 을 들어보자

1 앞에는 4 8 6 2 5 로 -> 5
2 앞에는 4 8 6 -> 3
3 앞에는 4 8 6 5 -> 4
4 앞에는 -> 0
5 앞에는 8 6 -> 2
6 앞에는 8 -> 1
7 앞에는 8 -> 1
8 은 0

따라서 Inversion Seq 는 5 3 4 0 2 1 1 0 이 된다.

2. 나의 풀이

import Foundation

func solution(_ inversion: [Int]) -> [Int] {
   var ret: [Int] = []
   for i in 0..<inversion.count {
       ret.insert(inversion.count - i, at: inversion[inversion.count - i - 1])
   }
   return ret
}

3. 풀이 설명

개인적으로 swift는 문자열이나 배열의 index 개념이 매우 어렵게 되어있다고 생각한다. 특히 for 문을 돌릴 때 index 를 사용하지 않고 돌릴 수 있다는 장점이 있기 때문에 더 그런듯 하다.

이번 문제의 풀이는 insert를 잘 활용해야한다.
Array.insert[ Int , at: Int] 개념은 여기 에 잘 나와있다.

핵심은 뒤에서부터 앞으로 차근차근 삽입을 해가면서 쌓아가야 한다는 것..!

profile
iOS 개발, Flutter 개발, Swift, Dart, 42 Seoul 3기

0개의 댓글