Swift | programmers/Lv1.

Lv1.x만큼 간격이 있는 n개의 숫자

iOSDEv 2024. 2. 2. 10:16

나의 풀이

그외 풀이
//map 고차함수를 이용하여 걸러냄 
func solution(_ x:Int, _ n:Int) -> [Int64] {
    return Array(1...n).map { Int64($0 * x) }
}

 

 

프로그래머스에서 문제를 풀 때 고차함쉐 대해서 많이 다루기 때문에 다음에 한 번에 정리를 하고 자주 사용해서 편하게 이용하자

 

 

func solution(_ x:Int, _ n:Int) -> [Int64] {
    return x == 0
        ? Array(repeating: 0, count: n)
        : Array(stride(from: x, through: x * n, by: x)).map{ Int64($0) }
}

 

  • Array 생성
    • var array = [Int](repeating: 0, count: 10) 
      • 생성과 동시에 10개의 element 생성

  • stride(from:to:by:)
    • start : 시작할 값
    • end : 종료값 (포함요소가 아님)
    • by / through : by / end는 시퀀스를 제한하는 종료의 값 
      • by : 마지막 결과값을 포함하지 않음
      • through : 마지막 결과값을 포함

 

 

func solution(_ x:Int, _ n:Int) -> [Int64] {
    return Array(repeating: x, count: n).enumerated().map{Int64(($0.offset+1)*$0.element) }
}
  • offset이란? 인덱스 접근
  • 우선 Array(repeating:count:)생성자를 사용해서 x를 n개의 배열을 생성
  • enumerated()호출해서 각 원소에 대한 인덱스와 값을 포함하는 튜플의 시퀀스를 생성하게됨
  • map함수를 사용하여 클로저를 사용했음
    • offset(==index)과 element(==value)을 이용
      • 여기서 offset + 1 을 사용하는 이유는? 첫 번째 항이 1부터 시작하기 때문에
      • 계산은 (offset + 1) * element

  • enumerated()
    • c#에서 많이 사용했던 친구였는데 swift에도 있다
    • 쉽게 말하자면 (n,x) 튜플 형태로 리턴을 한다