Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용하여 순환 트랙에서 가장 많이 방문한 섹터를 찾는 프로그램

<시간/>

숫자 n과 rounds라는 배열이 있다고 가정합니다. 1에서 n까지 레이블이 지정된 n개의 서로 다른 섹터로 구성된 원형 트랙이 있습니다. 이제 이 트랙에서 경주가 열릴 것이라고 가정하고 경주는 m개의 다른 라운드로 구성됩니다. i번째 라운드는 섹터 라운드[i - 1]에서 시작하여 섹터 라운드[i]에서 끝납니다. 예를 들어, 라운드 1이 섹터 라운드[0]에서 시작하여 섹터 라운드[1]에서 끝나는 경우입니다. 따라서 가장 많이 방문한 섹터를 오름차순으로 정렬해야 합니다. (트랙 번호는 시계 반대 방향으로 섹터 번호의 오름차순입니다)

따라서 입력이 n =4 rounds =[1,3,1,2]와 같으면 출력은 [1, 2]

가 됩니다.

Python을 사용하여 순환 트랙에서 가장 많이 방문한 섹터를 찾는 프로그램

레이스가 섹터 1부터 시작하기 때문입니다. 방문한 섹터의 순서는 [1,2,3(1라운드 종료),4,1(2라운드 종료), 2(3라운드 종료)]입니다. 여기에서 섹터 1과 2는 모두 두 번 방문되었으며 가장 많이 방문한 섹터입니다. 그리고 섹터 3과 4는 한 번만 방문합니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • d :=새 지도

  • 범위 1에서 n까지의 j에 대해 수행

    • d[j] :=0

  • d[rounds[0]] :=1

  • 범위 1에서 라운드 크기 - 1에 있는 i의 경우 수행

    • 라운드[i]> 라운드[i-1]이면

      • 범위 라운드[i-1]+1에서 라운드[i]+1까지의 j에 대해

        • d[j] :=d[j] + 1

    • 그렇지 않으면

      • 범위 라운드의 j에 대해 [i-1]+1에서 n까지, 수행

        • d[j] :=d[j] + 1

      • 범위 1에서 라운드[i]까지의 j에 대해 수행

        • d[j] :=d[j] + 1

  • curr :=d[rounds[0]]

  • 아웃 :=[라운드[0]]

  • 범위 1에서 n까지의 i에 대해 수행

    • i가 rounds[0]과 같지 않으면

      • d[i]> curr이면

        • 커 :=d[i]

        • 아웃 :=[i]

      • 그렇지 않으면 d[i]가 curr과 같을 때

        • out 없이 i 추가

  • 정렬 후 반환

예제(파이썬)

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(n, rounds):d ={} in range(1,n+1):d[j] =0 d[rounds[0]] =1 for i in range(1, len (rounds)):rounds[i]> rounds[i-1]인 경우:j in range(rounds[i-1]+1, rounds[i]+1):d[j] +=1 else:for j in range(rounds[i-1]+1,n+1):d[j] +=1 in range(1,rounds[i]+1):d[j] +=1 curr =d [rounds[0]] out =[rounds[0]] for i in range(1,n+1):if i !=rounds[0]:if d[i]> curr:curr =d[i] out =[i] elif d[i] ==curr:out =out + [i] return(sorted(out))n =4rounds =[1,3,1,2]print(solve(n, rounds)) 

입력

4, [1,3,1,2]

출력

[1, 2]