본문 바로가기

카테고리 없음

파이썬 _ 이동 최대 시간 찾기

문제

작은 개구리는 강 반대편으로 가고 싶어한다. 개구리는 처음에 강의 한 뱅크(위치 0)에 위치하며 반대편 뱅크(위치 X+1)로 이동하려고 합니다. 나뭇잎이 나무에서 강의 수면으로 떨어진다.

낙엽을 나타내는 N개의 정수로 구성된 배열 A가 주어집니다. A[K]는 K 시간에 한 잎이 떨어지는 위치를 나타내며, 초 단위로 측정됩니다.

목표는 개구리가 강 반대편으로 점프할 수 있는 가장 빠른 시기를 찾는 것이다. 개구리는 1에서 X까지 강을 가로지르는 모든 위치에 나뭇잎이 나타날 때만 건널 수 있습니다. 여러분은 강의 물살이 아주 작다고 생각할 수 있습니다. 즉, 나뭇잎이 강에 떨어졌을 때 위치가 바뀌지 않습니다.

예를 들어 정수 X = 5 및 어레이 A가 주어지면 다음과 같습니다.

A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
두 번째 6에서는 잎이 위치 5로 떨어집니다. 이것은 강을 가로지르는 모든 위치에 나뭇잎이 나타나는 가장 빠른 시기이다.

함수 쓰기:

분해능(X, A)

N개의 정수와 정수 X로 구성된 비어 있지 않은 배열 A가 주어진다면 개구리가 강의 반대편으로 점프할 수 있는 가장 빠른 시간을 반환합니다.

개구리가 강 반대편으로 절대 점프할 수 없으면 기능이 -1로 돌아가야 합니다.

예를 들어, X = 5 및 어레이 A에 다음과 같은 조건이 주어집니다.

A[0] = 1
A[1] = 3
A[2] = 1
A[3] = 4
A[4] = 2
A[5] = 3
A[6] = 5
A[7] = 4
위에서 설명한 대로 함수는 6을 반환해야 합니다.

다음 가정에 대해 효율적인 알고리즘을 작성합니다.

N과 X는 [1..] 범위의 정수입니다.100,000];
어레이 A의 각 요소는 [1..] 범위 내의 정수입니다.X]를 클릭합니다.

 

코드

# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")

def solution(X, A):
    
    dictionary={}
    for iter in range(len(A)):
        key=A[iter]
        value=iter
		
        #딕셔너리로 변경함
        if key in dictionary:
            dictionary[key]=min(dictionary[key],value)
        else: 
            dictionary[key]=value

    max_number=0
    #최대값 찾기 
    for index in range(1,X+1):
    	#가다가 길이 없으면 -1 리턴
        if index not in dictionary:
            return -1
        else:
            max_number=max(max_number,dictionary[index])

    return max_number

 

예외처리

값이 가장클때, 작을떄 , 한칸일때, 등등