>

파이썬을 처음 접했고 Hackerrank 문제 배열 및 간단한 쿼리 이지만 많은 테스트 사례의 경우 프로그램이 '시간 초과로 인해 종료되었습니다'. 어떻게하면 더 효율적으로 만들 수 있습니까?

아래에 주요 스왑 기능을 붙여 넣었습니다. (M 번 반복)

temp = input()
temp = temp.split(" ")
i = int(temp[1])-1
j = int(temp[2])-1
rep = (i-1)+1
if(temp[0]=='1') :
        rep = (i-1)+1
        while(i<=j) :
            count = i-1
            ex1 = count
            ex2 = i
            for k in range(0,rep) :
                arr[ex1], arr[ex2] = arr[ex2], arr[ex1]
                ex1 = ex1-1
                ex2 = ex2-1
            i = i+1
else :
    rep = (N-(j+1))
    while(j>=i) :
        count = j+1
        ex1 = count
        ex2 = j
        for k in range(0,rep) :
            arr[ex1], arr[ex2] = arr[ex2], arr[ex1]
            ex1 = ex1+1
            ex2 = ex2+1
        j=j-1

  • 답변 # 1

    많은 루프를 사용하는 대신 간단하게 슬라이스를 연결해 볼 수 있습니다 :

    def query(lst, t, start, end):
        # Convert to proper zero-indexed index
        start -= 1
        if t == '1':
            return lst[start:end] + lst[:start] + lst[end:]
        elif t == '2':
            return lst[:start] + lst[end:] + lst[start:end]
    
    # Get the input however you want
    N, M = map(int, input().split())
    arr = list(map(int, input().split()))
    assert len(arr) == N
    for _ in range(M):
        t, start, end = input().split()
        arr = query(arr, t, int(start), int(end))
    print(abs(arr[0] - arr[N - 1]))
    print(*arr)
    
    

    입력 :

    8 4
    1 2 3 4 5 6 7 8
    1 2 4
    2 3 5
    1 4 7
    2 1 4
    
    

    출력 :

    1
    2 3 6 5 7 8 4 1
    
    

  • 이전 clpfd - corelogic Clojure (CLP) 암호화 연산에서 apply 사용
  • 다음 android - 스트로크를 변경하지 않고 setColorFilter를 Button으로 설정