๋ฌธ์
์๊ฐ ๋ณต์ก๋
- n๋งํผ์ ๋ฐ๋ณต + ์ต๋ n๋งํผ์ ํ์ + ์ต๋ nํฌ๊ธฐ๋ก ์ ๋ ฌ -> O(n)
๋ฌธ์ ์ ๊ทผ๋ฒ
- ๋์
๋๋ฆฌ์ ๋ชจ๊ธฐ์ ์
ํด์ฅ ์๊ฐ์ ๊ธฐ๋กํ๋ค. -> ์
์ฅ ์๊ฐ: +1, ํด์ฅ ์๊ฐ: -1
- ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ๋ชจ๊ธฐ ์, ํ์ฌ์ ๋ชจ๊ธฐ ์, ๋ต์ด ๋ ์
ํด์ฅ ์๊ฐ์ ์ด๊ธฐํํ๋ค.
- ์ ํํ ์ ๋ต์ ์ํ flag๋ฅผ ์ด๊ธฐํํ๋ค. -> flag๊ฐ ์๋ ๊ฒฝ์ฐ, ํด์ฅ ์๊ฐ์ด ๋ค๋ก ๋ฐ๋ฆด ์ ์๋ค.
(์ต๋์น๋ก ์ฆ๊ฐํ๋ค ๊ฐ์ํ๋ ํจํด์ด ๋ฐ๋ณต๋๋ฉด, ํด์ฅ์๊ฐ์ด ๋ง์ง๋ง ํจํด์ ๊ฐ์ํ๋ ์๊ฐ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ)
- ๋์
๋๋ฆฌ๋ฅผ์ ๋ ฌํ์ฌ ๊ฐ์ฅ ์ฒ์๋ถํฐ ํ์ํ๋ค.
4-1. ํ์ฌ ๋ชจ๊ธฐ ์์ ํ์ฌ ํค์ ํด๋นํ๋ ๊ฐ(ํ์ฌ ์๊ฐ์ ๋ชจ๊ธฐ ์)์ ๋ํ๋ค.
4-2. ํ์ฌ ๋ชจ๊ธฐ ์๊ฐ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ๋ชจ๊ธฐ ์๋ณด๋ค ํฌ๋ค๋ฉด ๊ฐฑ์ ์ ํด์ค ํ, ์
์ฅ ์๊ฐ์ ํ์ฌ ์๊ฐ์ผ๋ก ์ค์ ํ๊ณ flag๋ฅผ True๋ก ์ฒดํฌํด์ค๋ค.
4-3. ํ์ฌ ๋ชจ๊ธฐ ์๊ฐ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ๋ชจ๊ธฐ ์๋ณด๋ค ์์ผ๋ฉด์ flag๊ฐ True๋ฉด, ํด์ฅ ์๊ฐ์ ํ์ฌ ์๊ฐ์ผ๋ก ์ค์ ํ๊ณ flag๋ฅผ False๋ก ์ฒดํฌํด์ค๋ค.
์ ๋ฆฌ
- ๋ชจ๊ธฐ์ ์ ๋ณด๊ฐ ๋ค์ด์๋ ์๊ฐ๋ง์ ์ฐจ๋ก๋๋ก ํ์ํ๋ฉด์, ๋ชจ๊ธฐ์ ์๊ฐ ์ต๋๊ฐ ๋๋ ์๊ฐ์ ์
์ฅ ์๊ฐ์ผ๋ก ๊ฐฑ์ ํ๊ณ ์ต๋์น์์ ๊ฐ์ํ๋ ์๊ฐ์ ํด์ฅ ์๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
- ๊ฐ์ ํจํด์ด ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณต๋์ด๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ๋์ ๊ตฌ๊ฐ๋ง์ ์ถ๋ ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ flag๊ฐ ํ์ํ๋ค.
์ฝ๋
import sys
from collections import defaultdict
input = sys.stdin.readline
n = int(input())
d = defaultdict(int)
for _ in range(n):
s, e = map(int, input().split())
d[s] += 1
d[e] -= 1
max_mos, now_mos = 0, 0
tem, txm = 0, 0
flag = False
for i in sorted(d.keys()):
now_mos += d[i]
if now_mos > max_mos:
max_mos = now_mos
tem = i
flag = True
elif now_mos < max_mos and flag:
txm = i
flag = False
print(max_mos)
print(tem, txm)