[Codility] 4. FrogRiverOne

Donghee Lee·2022년 3월 20일
0

Algorithm

목록 보기
7/17
post-thumbnail

[Codility] 4. FrogRiverOne


문제 링크

FrogRiverOne

문제 요약

개구리의 목표위치까지 강의 각 칸에 잎이 떨어져 있을 때, 개구리가 한 곳에서 다른 곳으로 이동할 수 있는 최소시간을 구하라.
즉, 개구리가 이동하기 위한 잎으로 덮여있는 길이 완성되는 시점을 구하라.

요구사항

N and X are integers within the range [1..100,000];
each element of array A is an integer within the range [1..X].

초기 코드

  • Dictionary로 각 칸에 떨어지면 true, 없으면 false로 A를 순회하며 값을 넣었지만, 최종적으로 떨어지는 잎의 시간을 구하지 못해 풀지 못했다.
    (Dictionary로 할 시 각 idx를 A[i]에서 잎이 떨어졌는지 여부는 확인이 가능했지만, 순번은 못구했음...)

ググっちゃった、、

최종 코드

import Foundation
import Glibc

public func solution(_ X : Int, _ A : inout [Int]) -> Int {
    var forCheckPos = Set<Int>()
    for i in 1...X {
        forCheckPos.insert(i)
    }

    for (idx, val) in A.enumerated() {
        forCheckPos.remove(val)

        if forCheckPos.count == 0 {
            return idx
        }
    }
    return -1
}

Set 사용법

let nums: Set<Int> = [1, 2, 3, 4]
 
for num in nums {
    print(num)        // 3 2 4 1
}

Set배열과 비슷하지만 정렬되지 않고, 중복 요소를 저장하지 않는다.
선언 및 초기화는 배열과 같다.

profile
Better than Yesterday

0개의 댓글