ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 20440 ๐ŸŽต๋‹ˆ๊ฐ€ ์‹ซ์–ด ์‹ซ์–ด ๋„ˆ๋ฌด ์‹ซ์–ด ์‹ซ์–ด ์˜ค์ง€ ๋งˆ ๋‚ด๊ฒŒ ์ฐ์ฉ๋Œ€์ง€๋งˆ๐ŸŽต - 1 with Python
    PS 2022. 5. 17. 01:23
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 20440 ๐ŸŽต๋‹ˆ๊ฐ€ ์‹ซ์–ด ์‹ซ์–ด ๋„ˆ๋ฌด ์‹ซ์–ด ์‹ซ์–ด ์˜ค์ง€ ๋งˆ ๋‚ด๊ฒŒ ์ฐ์ฉ๋Œ€์ง€๋งˆ๐ŸŽต - 1

    ๐Ÿ’ก ์กฐ๊ฑด

    1. ์–ด๋–ค ๋ชจ๊ธฐ๊ฐ€ ๋ฐฉ์— ์–ธ์ œ ์ž…์žฅํ–ˆ๊ณ  ์–ธ์ œ ํ‡ด์žฅํ–ˆ๋Š”์ง€๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.

    2. ๋ฐฉ์— ์ถœ์ž…ํ•œ ๋ชจ๊ธฐ์˜ ๋งˆ๋ฆฟ์ˆ˜ N(1 โ‰ค N โ‰ค 1,000,000)

    3. N๊ฐœ์˜ ์ค„์— ๋ชจ๊ธฐ์˜ ์ž…์žฅ ์‹œ๊ฐ TE๊ณผ ํ‡ด์žฅ ์‹œ๊ฐ TX์ด ์ฃผ์–ด์ง„๋‹ค. (0 โ‰ค TE < TX โ‰ค 2,100,000,000)
      ๋ชจ๊ธฐ๋Š” [TE, Tx)๋™์•ˆ ์กด์žฌํ•œ๋‹ค.

    4. ์ฒซ์งธ ์ค„์— ์ง€๋™์ด ๋ฐฉ์— ๋ชจ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€์˜ ๋ชจ๊ธฐ ๋งˆ๋ฆฟ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
      ๋ฐฉ์— ๋ชจ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ๋งŽ์ด ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€์˜ ์—ฐ์† ๊ตฌ๊ฐ„ ์ „์ฒด๋ฅผ [TEm, TXm)์ด๋ผ๊ณ  ํ•  ๋•Œ,
      ๋‘˜์งธ ์ค„์— TEm, TXm์„ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
      ๋‹จ, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ์„ ๊ธฐ์ค€์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

    5. ๋ชจ๊ธฐ๋“ค์˜ ๋ฐฉ ์ž…์žฅ, ํ‡ด์žฅ ์‹œ๊ฐ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๋ชจ๊ธฐ๋“ค์ด ๊ฐ€์žฅ ๋งŽ์ด ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€์™€ ํ•ด๋‹น ์‹œ๊ฐ„๋Œ€์— ๋ชจ๊ธฐ๊ฐ€ ๋ช‡ ๋งˆ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ

    6. 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

    ์˜ˆ์ œ 1

    ์˜ˆ์ œ 2

    3
    0 16
    0 6
    0 10

    ์‹คํ–‰๊ฒฐ๊ณผ 2

    3
    0 6

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๋จผ์ €, ๋‚˜๋Š” ์ขŒํ‘œ ์••์ถ• + imos ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์ดํ–ˆ๋‹ค.
    1. ์ขŒํ‘œ์••์ถ•์ด๋ž€ ๋ชจ๋“  ๊ตฌ๊ฐ„์ด ์•„๋‹ˆ๋ผ, ์ค‘์š”ํ•œ ๊ตฌ๊ฐ„ ํ˜น์€ ์ˆซ์ž๋งŒ ๋“ค๊ณ ์žˆ๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.
      ์ˆœ์œ„๊ฐ€ ์ค‘์š”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ž…๋ ฅ๊ฐ’์˜ ๊ฐœ์ˆ˜ < ์ž…๋ ฅ๊ฐ’์˜ ๋ฒ”์œ„์ผ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    1. ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง€๋Š” ๋ชจ๊ธฐ๋“ค์ด ์กด์žฌํ•˜๋Š” ์‹œ๊ฐ„์€ ์ตœ๋Œ€ 100๋งŒ ๊ฐœ์ด๋‹ค.
      ๋ชจ๊ธฐ๋“ค์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„๋Œ€๋Š” 0์—์„œ ์ตœ๋Œ€ 21์–ต๊นŒ์ง€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๊ตฌ๊ฐ„์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•  ์ˆ˜๋Š” ์—†๋‹ค.
      ๋”ฐ๋ผ์„œ (2)๋ฒˆ์—์„œ ์„ค๋ช…ํ•œ ์ขŒํ‘œ์••์ถ•์„ ํ†ตํ•ด ๋‚ด๊ฐ€ ํ•„์š”ํ•œ, ์ค‘์š”ํ•œ ๊ตฌ๊ฐ„์˜ ๋ฒˆํ˜ธ๋งŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
    1. ์ด ๋•Œ, ๋ชจ๊ธฐ๋“ค์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์€ ์ตœ๋Œ€ 200๋งŒ๊ฐœ์˜ ์ •๋ณด๊ฐ€ ๋˜๊ธฐ์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. (4)๋ฒˆ์˜ ์ƒ๊ฐ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚˜๋Š” time_set = set() ์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์„ ํ†ตํ•ด ์ค‘๋ณต์„ ์ œ๊ฑฐํ–ˆ๋‹ค.
      ์ด set() ์ž๋ฃŒํ˜•์˜ ๊ธธ์ด + 1๋งŒํผ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.
      ์ƒ์„ฑํ•œ ๋ฆฌ์ŠคํŠธ์— ๊ฐ ๋ชจ๊ธฐ์˜ ์ขŒํ‘œ๋ฅผ update ํ•ด์ฃผ๋ฉด ์ค‘๋ณต์ œ๊ฑฐ๊ฐ€ ๋˜๋ฉฐ, ์ด๋ฅผ ๋‹ค์‹œ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์ •๋ ฌํ•œ๋‹ค.
    1. (5)๋ฒˆ์˜ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ, ๊ฐ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ €์žฅํ•  time ๋ฆฌ์ŠคํŠธ์— ๊ฐ ๊ตฌ๊ฐ„์„ tuple๋กœ ๋ฌถ์–ด๋„ฃ์–ด ๊ด€๋ฆฌํ•œ๋‹ค.
      ์˜ˆ์ œ 1๋ฒˆ์„ ์˜ˆ๋กœ ๋“ค์—ˆ์„ ๋•Œ, set() ์ž๋ฃŒํ˜•์—๋Š” {2, 4, 6, 10, 16} ์ด ๋“ค์–ด๊ฐ€ ์žˆ๊ณ , ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์„ ๋Œ€์‘ ์‹œํ‚ค๋ฉด
      2๋Š” ์ธ๋ฑ์Šค 0, 4๋Š” ์ธ๋ฑ์Šค 1์— ๋Œ€์‘๋œ๋‹ค.
    1. ๋Œ€์‘๋˜๋Š” ๊ด€๊ณ„๋ฅผ dictionary ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•ด ์ €์žฅํ•ด์ฃผ๋ฉด ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค.
    1. time_set ์˜ ๊ธธ์ด + 1๋งŒํผ ์ƒ์„ฑํ•œ ๋ฆฌ์ŠคํŠธ๋Š” imos ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ๊ตฌ๊ฐ„์„ ๊ฐฑ์‹ ์‹œํ‚ฌ ๊ฒƒ.
    1. imos ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€, ๊ฐ ์ฟผ๋ฆฌ๊ฐ€ ๊ตฌ๊ฐ„ [s, e] ๋‚ด์˜ ๊ฐ’์„ ๊ฐฑ์‹ ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ,
      ์ด๋ฅผ ๋งค ์ฟผ๋ฆฌ๋งˆ๋‹ค ์ผ์ผํžˆ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ณ , ์‹œ์ž‘๊ณผ ๋๋งŒ ๊ธฐ๋กํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰์— ํ•œ ๋ฒˆ์˜ ์ฒ˜๋ฆฌ๋กœ ๊ฐ’์„ ์‹œ๋ฎฌ๋ ˆ์ดํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
      ์•„๋ฌด๋ฆฌ ๋งŽ์€ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ๋”๋ผ๋„, O(N)์˜ ์‹œ๊ฐ„์„ ๋ณด์žฅํ•œ๋‹ค.(๊ฐœ์‚ฌ๊ธฐ)
    1. ๋ชจ๊ธฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ตฌ๊ฐ„์˜ ์ •๋ณด๋ฅผ ๋‹ด์•„๋‘์—ˆ๋˜ time์„ ์ˆœํšŒํ•˜๋ฉด์„œ,
      1. ๋ชจ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ตฌ๊ฐ„์˜ ์‹œ์ž‘(s) ์‹œ๊ฐ„์ด prefix ๋ฆฌ์ŠคํŠธ์— ๋Œ€์‘ํ•˜๋Š” ์›์†Œ๊ฐ’์— +1์„ ํ•ด์ค€๋‹ค.
        ์ด๋Š” dictionary[s] += 1 ์„ ํ†ตํ•ด์„œ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
      2. ๋ชจ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ตฌ๊ฐ„์˜ ๋(e) ์‹œ๊ฐ„์ด prefix ๋ฆฌ์ŠคํŠธ์— ๋Œ€์‘ํ•˜๋Š” ์›์†Œ๊ฐ’์— -1์„ ํ•ด์ค€๋‹ค.
    1. ์ด์ œ prefix ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ตฌ๊ฐ„ํ•ฉ์„ ๊ตฌํ•ด์ฃผ๋ฉฐ, ์ด prefix ๋ฆฌ์ŠคํŠธ์˜ max๊ฐ’์„ ๊ตฌํ•ด max_val์— ์ €์žฅํ•œ๋‹ค.
    1. ๋ฌธ์ œ ์ง€๋ฌธ์—์„œ ๋‹จ, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ์„ ๊ธฐ์ค€์œผ๋กœ ์ถœ๋ ฅํ•œ๋‹ค. ๋ผ๊ณ  ํ–ˆ๋‹ค.
      prefix๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ max_val์ด ์–ด๋Š ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š”์ง€ ์ €์žฅํ•˜๊ณ , ์–ด๋Š ๊ตฌ๊ฐ„์—์„œ ๋‹ฌ๋ผ์ง€๋Š”์ง€ ์ €์žฅํ•œ ๋’ค, ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

    ๐Ÿ’พ ๋ฐฐ์šด์ 

    1. imos ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ตฌ๊ฐ„ํ•ฉ์˜ ํ™•์žฅ
    2. ์ขŒํ‘œ์••์ถ•์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜ ์ตœ์†Œํ™”ํ•˜๊ธฐ
    3. (1), (2) ๋ฅผ ํ†ตํ•ด prefix ๋ฅผ ํ•  ๋•Œ, ํฐ ๋ฒ”์œ„๋ฅผ ์ข๊ฒŒ ์ขํ˜€ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.