-
[๋ฐฑ์ค] 20440 ๐ต๋๊ฐ ์ซ์ด ์ซ์ด ๋๋ฌด ์ซ์ด ์ซ์ด ์ค์ง ๋ง ๋ด๊ฒ ์ฐ์ฉ๋์ง๋ง๐ต - 1 with PythonPS 2022. 5. 17. 01:23728x90๋ฐ์ํ
๐ BOJ 20440 ๐ต๋๊ฐ ์ซ์ด ์ซ์ด ๋๋ฌด ์ซ์ด ์ซ์ด ์ค์ง ๋ง ๋ด๊ฒ ์ฐ์ฉ๋์ง๋ง๐ต - 1
๐ก ์กฐ๊ฑด
์ด๋ค ๋ชจ๊ธฐ๊ฐ ๋ฐฉ์ ์ธ์ ์ ์ฅํ๊ณ ์ธ์ ํด์ฅํ๋์ง๋ฅผ ๊ธฐ๋กํ ์ ์๋ค.
๋ฐฉ์ ์ถ์ ํ ๋ชจ๊ธฐ์ ๋ง๋ฆฟ์ N(1 โค N โค 1,000,000)
N๊ฐ์ ์ค์ ๋ชจ๊ธฐ์ ์ ์ฅ ์๊ฐ TE๊ณผ ํด์ฅ ์๊ฐ TX์ด ์ฃผ์ด์ง๋ค. (0 โค TE < TX โค 2,100,000,000)
๋ชจ๊ธฐ๋ [TE, Tx)๋์ ์กด์ฌํ๋ค.์ฒซ์งธ ์ค์ ์ง๋์ด ๋ฐฉ์ ๋ชจ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ์๋ ์๊ฐ๋์ ๋ชจ๊ธฐ ๋ง๋ฆฟ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฐฉ์ ๋ชจ๊ธฐ๊ฐ ๊ฐ์ฅ ๋ง์ด ์๋ ์๊ฐ๋์ ์ฐ์ ๊ตฌ๊ฐ ์ ์ฒด๋ฅผ [TEm, TXm)์ด๋ผ๊ณ ํ ๋,
๋์งธ ์ค์ TEm, TXm์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํ์ฌ ์ถ๋ ฅํ๋ค.
๋จ, ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ถ๋ ฅํ๋ค.๋ชจ๊ธฐ๋ค์ ๋ฐฉ ์ ์ฅ, ํด์ฅ ์๊ฐ์ด ์ฃผ์ด์ก์ ๋ ๋ชจ๊ธฐ๋ค์ด ๊ฐ์ฅ ๋ง์ด ์๋ ์๊ฐ๋์ ํด๋น ์๊ฐ๋์ ๋ชจ๊ธฐ๊ฐ ๋ช ๋ง๋ฆฌ๊ฐ ์๋์ง ๊ตฌํ๋ ๋ฌธ์
imos, ๋์ ํฉ, ์ขํ์์ถ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin n = int(stdin.readline()) time = [] time_set = set() for i in range(n): s, e = map(int, stdin.readline().split()) time.append((s, e)) time_set.update([s, e]) d = {} cnt = 0 time_set = list(time_set) time_set.sort() for i in time_set: d[i] = cnt cnt += 1 prefix = [0 for _ in range(len(time_set) + 1)] for s, e in time: prefix[d[s]] += 1 prefix[d[e]] -= 1 max_val = 0 for i in range(len(time_set)): prefix[i] = prefix[i] + prefix[i - 1] if prefix[i] > max_val: max_val = prefix[i] print(max_val) ans = [0, 0] tf = False for i in range(len(time_set) + 1): if prefix[i] == max_val and not tf: ans[0] = time_set[i] tf = True if prefix[i] != max_val and tf: ans[1] = time_set[i] break print(*ans)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์ 1
3 2 16 4 6 6 10
์คํ๊ฒฐ๊ณผ 1
2 4 10
์์ 2
3 0 16 0 6 0 10
์คํ๊ฒฐ๊ณผ 2
3 0 6
โจ๏ธ ๋ฌธ์ ํ์ด
- ๋จผ์ , ๋๋ ์ขํ ์์ถ + imos ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋ฌธ์ ๋ฅผ ํ์ดํ๋ค.
- ์ขํ์์ถ์ด๋ ๋ชจ๋ ๊ตฌ๊ฐ์ด ์๋๋ผ, ์ค์ํ ๊ตฌ๊ฐ ํน์ ์ซ์๋ง ๋ค๊ณ ์๋ ๊ธฐ๋ฒ์ด๋ค.
์์๊ฐ ์ค์ํ ์๊ณ ๋ฆฌ์ฆ์์ ์ ๋ ฅ๊ฐ์ ๊ฐ์ < ์ ๋ ฅ๊ฐ์ ๋ฒ์์ผ๋ ์ฌ์ฉํ๋ค.
- ๋ฌธ์ ์์ ์ฃผ์ด์ง๋ ๋ชจ๊ธฐ๋ค์ด ์กด์ฌํ๋ ์๊ฐ์ ์ต๋ 100๋ง ๊ฐ์ด๋ค.
๋ชจ๊ธฐ๋ค์ด ์กด์ฌํ ์ ์๋ ์๊ฐ๋๋ 0์์ ์ต๋ 21์ต๊น์ง์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ตฌ๊ฐ์ ์ํํ๋ฉด์ ๊ตฌ๊ฐํฉ์ ๊ตฌํ ์๋ ์๋ค.
๋ฐ๋ผ์ (2)๋ฒ์์ ์ค๋ช ํ ์ขํ์์ถ์ ํตํด ๋ด๊ฐ ํ์ํ, ์ค์ํ ๊ตฌ๊ฐ์ ๋ฒํธ๋ง ๊ด๋ฆฌํด์ผ ํ๋ค.
- ์ด ๋, ๋ชจ๊ธฐ๋ค์ด ์กด์ฌํ ์ ์๋ ๊ตฌ๊ฐ์ ์ต๋ 200๋ง๊ฐ์ ์ ๋ณด๊ฐ ๋๊ธฐ์ ์ค์ํ ์ ๋ณด๋ฅผ ๋ชจ๋ ๋ฆฌ์คํธ์ ๋ฃ์ด ๊ด๋ฆฌํ ์ ์๋ค.
- (4)๋ฒ์ ์๊ฐ์ ๊ตฌํํ๊ธฐ ์ํด์ ๋๋ time_set = set() ์งํฉ ์๋ฃํ์ ํตํด ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
์ด set() ์๋ฃํ์ ๊ธธ์ด + 1๋งํผ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.
์์ฑํ ๋ฆฌ์คํธ์ ๊ฐ ๋ชจ๊ธฐ์ ์ขํ๋ฅผ update ํด์ฃผ๋ฉด ์ค๋ณต์ ๊ฑฐ๊ฐ ๋๋ฉฐ, ์ด๋ฅผ ๋ค์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด์ฃผ๊ณ ์ ๋ ฌํ๋ค.
- (5)๋ฒ์ ์์
์ ์งํํ๋ฉด์, ๊ฐ ์๊ฐ๋๋ฅผ ์ ์ฅํ time ๋ฆฌ์คํธ์ ๊ฐ ๊ตฌ๊ฐ์ tuple๋ก ๋ฌถ์ด๋ฃ์ด ๊ด๋ฆฌํ๋ค.
์์ 1๋ฒ์ ์๋ก ๋ค์์ ๋, set() ์๋ฃํ์๋ {2, 4, 6, 10, 16} ์ด ๋ค์ด๊ฐ ์๊ณ , ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ง๋ ๋ฐฐ์ด์ ๋์ ์ํค๋ฉด
2๋ ์ธ๋ฑ์ค 0, 4๋ ์ธ๋ฑ์ค 1์ ๋์๋๋ค.
- ๋์๋๋ ๊ด๊ณ๋ฅผ dictionary ์๋ฃํ์ ์ฌ์ฉํด ์ ์ฅํด์ฃผ๋ฉด ๊ด๋ฆฌ๊ฐ ์ฝ๋ค.
- time_set ์ ๊ธธ์ด + 1๋งํผ ์์ฑํ ๋ฆฌ์คํธ๋ imos ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๊ตฌ๊ฐ์ ๊ฐฑ์ ์ํฌ ๊ฒ.
- imos ์๊ณ ๋ฆฌ์ฆ์ด๋, ๊ฐ ์ฟผ๋ฆฌ๊ฐ ๊ตฌ๊ฐ [s, e] ๋ด์ ๊ฐ์ ๊ฐฑ์ ์ํค๋ ๊ฒฝ์ฐ,
์ด๋ฅผ ๋งค ์ฟผ๋ฆฌ๋ง๋ค ์ผ์ผํ ๊ฐฑ์ ํ์ง ์๊ณ , ์์๊ณผ ๋๋ง ๊ธฐ๋กํด๋์๋ค๊ฐ ๋ง์ง๋ง์ ํ ๋ฒ์ ์ฒ๋ฆฌ๋ก ๊ฐ์ ์๋ฎฌ๋ ์ดํ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์๋ฌด๋ฆฌ ๋ง์ ์ฟผ๋ฆฌ๊ฐ ์๋๋ผ๋, O(N)์ ์๊ฐ์ ๋ณด์ฅํ๋ค.(๊ฐ์ฌ๊ธฐ)
- ๋ชจ๊ธฐ๊ฐ ์กด์ฌํ๋ ๊ตฌ๊ฐ์ ์ ๋ณด๋ฅผ ๋ด์๋์๋ time์ ์ํํ๋ฉด์,
- ๋ชจ๊ธฐ๊ฐ ์๋ ๊ตฌ๊ฐ์ ์์(s) ์๊ฐ์ด prefix ๋ฆฌ์คํธ์ ๋์ํ๋ ์์๊ฐ์ +1์ ํด์ค๋ค.
์ด๋ dictionary[s] += 1 ์ ํตํด์ ์ฝ๊ฒ ํ ์ ์๋ค. - ๋ชจ๊ธฐ๊ฐ ์๋ ๊ตฌ๊ฐ์ ๋(e) ์๊ฐ์ด prefix ๋ฆฌ์คํธ์ ๋์ํ๋ ์์๊ฐ์ -1์ ํด์ค๋ค.
- ๋ชจ๊ธฐ๊ฐ ์๋ ๊ตฌ๊ฐ์ ์์(s) ์๊ฐ์ด prefix ๋ฆฌ์คํธ์ ๋์ํ๋ ์์๊ฐ์ +1์ ํด์ค๋ค.
- ์ด์ prefix ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉด์ ๊ตฌ๊ฐํฉ์ ๊ตฌํด์ฃผ๋ฉฐ, ์ด prefix ๋ฆฌ์คํธ์ max๊ฐ์ ๊ตฌํด max_val์ ์ ์ฅํ๋ค.
- ๋ฌธ์ ์ง๋ฌธ์์ ๋จ, ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ๊ฐ์ฅ ๋น ๋ฅธ ์์ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ถ๋ ฅํ๋ค. ๋ผ๊ณ ํ๋ค.
prefix๋ฅผ ์ํํ๋ฉด์ max_val์ด ์ด๋ ์ธ๋ฑ์ค๋ถํฐ ์์ํ๋์ง ์ ์ฅํ๊ณ , ์ด๋ ๊ตฌ๊ฐ์์ ๋ฌ๋ผ์ง๋์ง ์ ์ฅํ ๋ค, ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐พ ๋ฐฐ์ด์
- imos ์๊ณ ๋ฆฌ์ฆ, ๊ตฌ๊ฐํฉ์ ํ์ฅ
- ์ขํ์์ถ์ ํตํด ๊ด๋ฆฌํ๋ ค๋ ๋ฐ์ดํฐ์ ์ ์ต์ํํ๊ธฐ
- (1), (2) ๋ฅผ ํตํด prefix ๋ฅผ ํ ๋, ํฐ ๋ฒ์๋ฅผ ์ข๊ฒ ์ขํ ๊ตฌํ ์ ์๋ ๋ฐฉ๋ฒ
๋ฐ์ํ'PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 22252 ์ ๋ณด ์์ธ ํธ์ with Python (0) 2022.05.18 [๋ฐฑ์ค] 20444 ์์ข ์ด์ ๊ฐ์ with Python (0) 2022.05.18 [๋ฐฑ์ค] 20436 ZOAC 3 with Python (0) 2022.05.17 [๋ฐฑ์ค] 20114 ๋ฏธ์ ๋ ธํธ with Python (0) 2022.05.15 [๋ฐฑ์ค] 18004 From A to B with Python (0) 2022.05.15