ps:problems:boj:28070
유니의 편지 쓰기
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 28070 |
문제명 | 유니의 편지 쓰기 |
레벨 | 골드 5 |
분류 |
그리디 |
시간복잡도 | O(nlogn) |
인풋사이즈 | n<=100,000 |
사용한 언어 | Python 3.11 |
제출기록 | 61180KB / 324ms |
최고기록 | 240ms |
해결날짜 | 2023/05/30 |
풀이
- 월 데이터가 문자열로 주어지지만, 포매팅이 잘 되어있어서 굳이 따로 파싱을 하지 않은 채로 그냥 정렬해도 잘 돌아간다
- 시간복잡도는 O(nlogn)
- 이 문제의 경우는, 나올수 있는 월 데이터의 범위가 작은 편이다 (8000*12). 그래서 그냥 정렬 대신에 8000*12 크기에 배열에 바로 카운트를 저장해가면서 처리해도 상관 없다. 카운팅 소트를 하는 것과 비슷한 느낌. 따로 구현은 안했지만, 이 경우에는 O(n+m)로 처리가 가능하고(m은 월 데이터의 범위), 실제 실행 속도도 이쪽이 좀더 빠른것 같다. 이 경우에는 기본적인 파싱은 필요할듯.
코드
"""Solution code for "BOJ 28070. 유니의 편지 쓰기".
- Problem link: https://www.acmicpc.net/problem/28070
- Solution link: http://www.teferi.net/ps/problems/boj/28070
"""
import sys
JOIN = 0
DISCHARGE = 1
def main():
N = int(sys.stdin.readline())
events = []
for _ in range(N):
join_month, discharge_month = sys.stdin.readline().split()
events.append((join_month, JOIN))
events.append((discharge_month, DISCHARGE))
max_count = count = 0
answer = None
for month, type_ in sorted(events):
count += 1 if type_ == JOIN else -1
if count > max_count:
max_count, answer = count, month
print(answer)
if __name__ == '__main__':
main()
ps/problems/boj/28070.txt · 마지막으로 수정됨: 2023/05/30 02:00 저자 teferi
토론