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