새벽의 기록

[프로그래머스] 181898번 : 가까운 1 찾기 (Swift) 본문

프로그래머스

[프로그래머스] 181898번 : 가까운 1 찾기 (Swift)

OneTen 2025. 2. 7. 00:51

https://school.programmers.co.kr/learn/courses/30/lessons/181898?language=swift

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제 설명

정수 배열 arr가 주어집니다. 이때 arr의 원소는 1 또는 0입니다. 정수 idx가 주어졌을 때, idx보다 크면서 배열의 값이 1인 가장 작은 인덱스를 찾아서 반환하는 solution 함수를 완성해 주세요.

단, 만약 그러한 인덱스가 없다면 -1을 반환합니다.


 
 

제한사항

  • 3 ≤ arr의 길이 ≤ 100'000
    • arr의 원소는 전부 1 또는 0입니다.

 

입출력 

 

입출력 예 설명

 

 

풀이

 

첫 번째 시도

import Foundation

func solution(_ arr:[Int], _ idx:Int) -> Int {
    var result = 0
    
    if arr.count+1 < idx {
        return -1
    } else if idx == 0 {
        if arr[0] == 1 {
            return 0
        } else {
            return -1
        }
    } else {
        for i in arr.indices {
            if i > idx {
                arr[i] == 1 ? result = i : nil
                if result != 0 { return result }
            }
        }
        
        return -1
    }
    
}

너무 쓸데없이 복잡하게 풀고 코드도 더러워서 매우매우 맘에 안듦

 

두 번째 시도

func solution(_ arr:[Int], _ idx:Int) -> Int {
    for i in idx..<arr.count{
        if arr[i] == 1 { return i }
    }
    return -1
}

처음보단 괜찮지만 뭔가 for문으로 인한 시간복잡도가 마음에 걸림. 

 

세 번째 시도

import Foundation

func solution(_ arr:[Int], _ idx:Int) -> Int {
    return arr[idx...].firstIndex(of: 1) ?? -1
}

찾아보니 swift에는 원하는 요소가 처음 나왔을 때의 인덱스를 반환하는 firstIndex라는 내장함수가 있어서 이걸 사용함!

이거 말고도 원하는 요소 자체를 반환하는 first 내장함수도 존재.

유용한 것들 되게 많다

 

 

Comments