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

Python을 사용하여 최대 인구 연도를 찾는 프로그램

<시간/>

각 행이 i번째 사람의 출생 및 사망 연도를 나타내는 두 개의 열(출생, 사망)이 있는 테이블이 있다고 가정합니다. 어떤 연도 y의 인구는 y 동안 생존한 사람의 수입니다. i번째 사람은 y가 포함 범위 [birth_i, death_i - 1]에 있을 때 y의 인구로 계산됩니다. (사람은 사망한 해에 계산되지 않습니다.) 따라서 인구가 가장 많은 가장 빠른 해를 찾아야 합니다.

따라서 입력이 다음과 같으면

출생 죽음
1970년 2010년
1960년 2020년
1940 1970년

대상과 일치하는 값이 하나만 있기 때문에 출력은 2가 됩니다. 즉, nums[4]이므로 i =4입니다. 이제 |4-2| =2.

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

  • d :=어떤 키가 발견되지 않으면 0을 반환하는 맵

  • res :=항목이 두 개인 목록 [2051, 0]

  • 매트릭스의 출생 연도 YOB 및 사망 연도 YOD에 대해 다음을 수행하십시오.

    • YOB에서 YOD까지의 연도에 대해 수행

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

      • d[년]>=res[1]이면

        • d[년]> res[1]이면

          • res :=두 개의 요소가 있는 목록 [year, d[year]]

        • 그렇지 않으면

          • res :=두 개의 요소가 있는 목록 [(연도 및 res[0]의 최소값), res[1]]

  • 반환 해상도[0]

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

예시

from collections import defaultdict
def solve(matrix):
   d = defaultdict(int)
   res = [2051, 0]
   for YOB, YOD in matrix:
      for year in range(YOB, YOD):
         d[year] += 1
         if d[year] >= res[1]:
            if d[year] > res[1]:
               res = [year, d[year]]
            else:
               res = [min(year, res[0]), res[1]]
   return res[0]
matrix = [[1970,2010],[1960,2020],[1940,1970]]
print(solve(matrix))

입력

[[1970,2010],[1960,2020],[1940,1970]]

출력

1960