포스트

[알고리즘] 개구리 길 건너게 하기. 나뭇잎 길 완성되는 최소 시간 구하기. Counting Elements

https://codility.com/media/train/2-CountingElements.pdf

  1. FrogRiverOne Find the earliest time when a frog can jump to the other side of a river.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

# 개구리가 강을 건넌다.
# position 0 -> position X+1
# 나뭇잎이 강에 떨어져있다.

# 배열 A: N개의 정수: 떨어진 나뭇잎들.
# A[K]: K초에 떨어진 나뭇잎 1개
# 매 초마다 1개 떨어지나보네.
# Goal: 가장 빠른 시간 찾기. 개구리가 강을 건널 수 있는 시간.
# 개구리는 모든 1~X까지 나뭇잎이 전부 있어야 건널 수 있음. 
#   A[0] = 1
#   A[1] = 3
#   A[2] = 1
#   A[3] = 4
#   A[4] = 2
#   A[5] = 3
#   A[6] = 5
#   A[7] = 4

# 개구리가 끝까지 강을 못 건너면 -1을 반환
# 위 예에선 6초에 모든 1~X까지 길이 있으므로 건널 수 있음.

# set을 만들고 싶다. 그 다음 1~X까지 값이 전부 있는지 보면, 건너는지 못 건너는지 보임.
# 못건널거라면 -1 리턴.
# 건널 수 있다면, 언제 건너는 지 검사하자.
# 초를 세면서, 나뭇잎이 떨어지면 하나씩 set에서 빼면 됨.
# set이 비면 끝남. 해당 초 리턴. 
def solution(X, A):
    positions:set = set(A)
    # print(positions)
    # 1~X 값으로만 set이 이루어졌으므로 숫자를 세서 일치하면 전부 있는거다.
    if not len(positions)==X:
        # 없어
        return -1
    # 언제 빨리 건널 수 있나.
    for t in range(len(A)):
        # print("t", t)
        if A[t] in positions:
            positions.remove(A[t])
            # print("removed", A[t])
        if not positions:
            return t
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.