나의 개발일지

[백준] 20440 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 [Python, 파이썬] 본문

백준

[백준] 20440 🎵니가 싫어 싫어 너무 싫어 싫어 오지 마 내게 찝쩍대지마🎵 - 1 [Python, 파이썬]

YoonJuHan 2023. 12. 11. 14:42
  • 문제 : https://www.acmicpc.net/problem/20440
  • 🔑 딕셔너리 key에 시간, value에 모기 마리 수 저장
    • 딕셔너리 생성 
      • 들어온 시간 value값에는 모기 마리 수를 더한다.
      • 나간 시간 value값에는 모기 마리 수를 뺀다.
    • 정렬
      • 딕셔너리 key, value 값으로 오름차순 정렬한다.
    • 정렬된 리스트에서 최댓값 찾기
      • 모기 마릿수를 순서대로 더해가면서 최댓값을 계속 업데이트한다.
      • 마지막으로 업데이트된 인덱스와 시간을 저장
    • 최댓값 인덱스 부터 모기가 모두 나간 시점 찾기
      • value가 0 미만인 값을 찾으면 해당하는 시간 저장하고 브레이크
    • 최댓값, 가장 많은 모기가 있는 시작 시간, 끝시간을 출력하면 끝 ✨

 

from collections import defaultdict
import sys
input = sys.stdin.readline

n = int(input())

mogi = defaultdict(int)

for _ in range(n):
    i, o = map(int, input().split())

    mogi[i] += 1    # 모기가 들어온 시간에 +1
    mogi[o] -= 1    # 모기가 나간 시간에 -1

sort_mogi = sorted(mogi.items())    # 모기가 들어온 순서대로 정렬

cnt = 0             # 마리수 세는 변수 
max_mogi = 0        # 최대 모기 수
start_idx = 0       # 최대 모기가 있는 시작 위치
start_time = sort_mogi[0][0]      # 최대 모기가 있는 시작 시간

for i in range(len(sort_mogi)):
    cnt += sort_mogi[i][1]              # i번 시간까지 들어온 모기의 마리 수를 구함

    if max_mogi < cnt:
        max_mogi = cnt                  # 최댓값 업데이트
        start_idx = i                   # 시작 인덱스
        start_time = sort_mogi[i][0]    # 시작 위치 시간

end_time = sort_mogi[-1][0]        # 최대 모기가 있는 끝 시간

for i in range(start_idx, len(sort_mogi)):  # 최대 모기가 있는 위치부터 시작
    if sort_mogi[i][1] < 0:                 # 모기가 모두 나갔으면
        end_time = sort_mogi[i][0]          # 끝 위치 인덱스
        break

print(max_mogi)
print(start_time, end_time)
Comments