๐Ÿ’ป Algorithm/Python

[Python] ๋ฐฑ์ค€ 19583 ์‹ธ์ด๋ฒ„๊ฐœ๊ฐ•์ดํšŒ (Set)

์„ ์ฃผ 2022. 7. 2. 15:27

 

๐Ÿ“Œ ๋ฌธ์ œ

๋ณด์˜์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์•„๋ฆฌ HI-ARC๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค.

 

๋ณด์˜์ด์™€ ์šด์˜์ง„ ์ผ๋™์€ 20๋…„๋„์— ์ž…ํ•™ํ•˜๋Š” ์‹ ์ž…์ƒ๋“ค์„ ๋งž์ดํ•˜๊ธฐ ์œ„ํ•ด ์—ด์‹ฌํžˆ ์ค€๋น„๋ฅผ ํ•ด์™”์œผ๋‚˜, ์ „์—ผ๋ณ‘์˜ ์œ ํ–‰์ด ์•…ํ™”๋œ ๋‚˜๋จธ์ง€ ์ •๋ถ€์—์„œ๋Š” “์‚ฌํšŒ์  ๊ฑฐ๋ฆฌ๋‘๊ธฐ”๋ฅผ ์„ ์–ธํ–ˆ๊ณ  ๊ทธ์— ๋”ฐ๋ผ ํ•™๊ต์—์„œ๋Š” ๊ต๋‚ด ๋ชจ๋“  ๋™์•„๋ฆฌ์— ์˜คํ”„๋ผ์ธ ๋ชจ์ž„์„ ์ž์ œํ•˜๋ผ๋Š” ๊ณต์ง€๋ฅผ ํ•˜๊ธฐ์— ์ด๋ฅด๋ €๋‹ค. ์˜คํ”„๋ผ์ธ์—์„œ ๋ชจ์ž„์„ ์ž์ œํ•˜๋ผ๋Š” ๊ถŒ๊ณ ๊ฐ€ ๋‚˜์˜จ ์–ด๋ ค์šด ์ƒํ™ฉ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ณด์˜์ด๋Š” ๊ธฐ์ง€๋ฅผ ๋ฐœํœ˜ํ•˜์—ฌ ๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ๋ฏธํŠœ๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒฐ์ •์„ ํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๋ฏธํŠœ๋ธŒ ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.

๋ˆ„๊ฐ€ ๊ฐœ๊ฐ•์ดํšŒ์— ์™”๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
๋ˆ„๊ฐ€ ๊ฐœ๊ฐ•์ดํšŒ ์ž๋ฆฌ์— ๋๊นŒ์ง€ ๋‚จ์•„์žˆ์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
์–ด๋–ค ์‚ฌ๋žŒ์ด ๊ฐœ๊ฐ•์ดํšŒ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๋‹จ์ˆœํžˆ ํ‹€์–ด๋†“๊ธฐ๋งŒ ํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค.
์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ์„๋ถ€๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ๋‹ค.

 

๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์—, ํ•™ํšŒ์›์˜ ์ž…์žฅ ํ™•์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ํ•™ํšŒ์›์˜ ์ž…์žฅ ์—ฌ๋ถ€๋Š” ๊ฐœ๊ฐ•์ดํšŒ๊ฐ€ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„ ์ด์ „์— ๋Œ€ํ™”๋ฅผ ํ•œ ์ ์ด ์žˆ๋Š” ํ•™ํšŒ์›์˜ ๋‹‰๋„ค์ž„์„ ๋ณด๊ณ  ์ฒดํฌํ•œ๋‹ค. ๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ์‹œ์ž‘ํ•˜์ž๋งˆ์ž ์ฑ„ํŒ… ๊ธฐ๋ก์„ ๋‚จ๊ธด ํ•™ํšŒ์›๋„ ์ œ ์‹œ๊ฐ„์— ์ž…์žฅ์ด ํ™•์ธ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.


๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ๋๋‚ด๊ณ  ๋‚˜์„œ, ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๋๋‚ผ ๋•Œ๊นŒ์ง€ ํ•™ํšŒ์›์˜ ํ‡ด์žฅ ํ™•์ธ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•œ๋‹ค. ํ•™ํšŒ์›์˜ ํ‡ด์žฅ ์—ฌ๋ถ€๋Š” ๊ฐœ๊ฐ•์ดํšŒ๊ฐ€ ๋๋‚˜๊ณ  ์ŠคํŠธ๋ฆฌ๋ฐ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€ํ™”๋ฅผ ํ•œ ์ ์ด ์žˆ๋Š” ํ•™ํšŒ์›์˜ ๋‹‰๋„ค์ž„์„ ๋ณด๊ณ  ์ฒดํฌํ•œ๋‹ค. ๊ฐœ๊ฐ•์ดํšŒ๊ฐ€ ๋๋‚˜์ž๋งˆ์ž ์ฑ„ํŒ… ๊ธฐ๋ก์„ ๋‚จ๊ฒผ๊ฑฐ๋‚˜, ๊ฐœ๊ฐ•์ดํšŒ ์ŠคํŠธ๋ฆฌ๋ฐ์ด ๋๋‚˜์ž๋งˆ์ž ์ฑ„ํŒ… ๊ธฐ๋ก์„ ๋‚จ๊ธด ํ•™ํšŒ์›๋„ ์ œ ์‹œ๊ฐ„์— ํ‡ด์žฅ์ด ํ™•์ธ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.


๋‹จ, 00:00๋ถ€ํ„ฐ๋Š” ๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด๋ฉฐ, ๊ฐœ๊ฐ•์ดํšŒ ์ŠคํŠธ๋ฆฌ๋ฐ ๋๋‚œ ์‹œ๊ฐ„ ์ดํ›„๋กœ ๋‚จ๊ฒจ์ ธ ์žˆ๋Š” ์ฑ„ํŒ… ๊ธฐ๋ก์€ ๋‹ค๋ฅธ ์ŠคํŠธ๋ฆฌ๋ฐ ์˜์ƒ์˜ ์ฑ„ํŒ… ๊ธฐ๋ก์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

 

์ด ๋•Œ, ์ž…์žฅ๋ถ€ํ„ฐ ํ‡ด์žฅ๊นŒ์ง€ ๋ชจ๋‘ ํ™•์ธ๋œ ํ•™ํšŒ์›์€ ์ „๋ถ€ ๋ช‡ ๋ช…์ธ๊ฐ€?

์ž…๋ ฅ

์ฒซ๋ฒˆ์งธ ์ค„์—๋Š” ๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„ S, ๊ฐœ๊ฐ•์ดํšŒ๋ฅผ ๋๋‚ธ ์‹œ๊ฐ„ E, ๊ฐœ๊ฐ•์ดํšŒ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ๋๋‚ธ ์‹œ๊ฐ„ Q๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (00:00 ≤ S < E < Q ≤ 23:59) ๊ฐ ์‹œ๊ฐ„์€ HH:MM์˜ ํ˜•์‹์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

 

๋‘๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ๋Š” HI-ARC์—์„œ ๋ฐฉ์†กํ•˜๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ์˜์ƒ์˜ ์ฑ„ํŒ… ๊ธฐ๋ก๋“ค์ด ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ฃผ์–ด์ง€๋Š”๋ฐ, (์‹œ๊ฐ„) (ํ•™ํšŒ์› ๋‹‰๋„ค์ž„)์˜ ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง„๋‹ค. ํ•™ํšŒ์›์˜ ๋‹‰๋„ค์ž„์€ ์•ŒํŒŒ๋ฒณ ๋Œ€์†Œ๋ฌธ์ž์™€ ์ˆซ์ž, ๊ทธ๋ฆฌ๊ณ  ํŠน์ˆ˜ ๊ธฐํ˜ธ(., _, -)๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด๋ฉฐ ์ตœ๋Œ€ 20๊ธ€์ž์ด๋‹ค.

 

๋ชจ๋“  ์ฑ„ํŒ… ๊ธฐ๋ก์€ ๊ฐœ๊ฐ•์ดํšŒ๊ฐ€ ์ผ์–ด๋‚œ ๋‚ ์— ๋ฐœ์ƒํ•œ ์ฑ„ํŒ… ๊ธฐ๋ก์ด๋‹ค. ์ฆ‰ 00:00~23:59์˜ ์‹œ๊ฐ„๋งŒ ์ฃผ์–ด์ง„๋‹ค. ์ฑ„ํŒ… ๊ธฐ๋ก์€ 10๋งŒ ์ค„์„ ๋„˜์ง€ ์•Š๋Š”๋‹ค.

์ถœ๋ ฅ

์ถœ์„์ด ํ™•์ธ๋œ ํ•™ํšŒ์›์˜ ์ธ์› ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1

22:00 23:00 23:30
21:30 malkoring
21:33 tolelom
21:34 minjae705
21:35 hhan14
21:36 dicohy27
21:40 906bc
23:00 906bc
23:01 tolelom
23:10 minjae705
23:11 hhan14
23:20 dicohy27

์˜ˆ์ œ ์ถœ๋ ฅ 1

5

์˜ˆ์ œ ์ž…๋ ฅ 2

06:00 12:00 18:00
06:00 shinyo17
06:00 kimchist
06:00 swoon
06:00 kheee512
06:00 Green55
09:00 kimchist
11:59 shinyo17
12:00 kimchist
17:59 swoon
17:59 swoon
18:00 kheee512
18:01 swoon
18:01 Green55
18:01 kheee512
18:01 swoon
18:21 jinius36
18:40 jeongyun1206

์˜ˆ์ œ ์ถœ๋ ฅ 2

3

 


 

๐Ÿ“Œ ํ’€์ด

import sys
input = sys.stdin.readline

start, end, stream = input().split()
start = int(start[:2] + start[3:])
end = int(end[:2] + end[3:])
stream = int(stream[:2] + stream[3:])

attend = set()
cnt = 0

while True:
    try:
        time, name = input().split()
        time = int(time[:2] + time[3:])
        if time <= start:
            attend.add(name)
        elif end <= time <= stream and name in attend:
            attend.remove(name)
            cnt += 1
    except:
        break

print(cnt)
  • start: ๊ฐœ๊ฐ•์ดํšŒ ์‹œ์ž‘ ์‹œ๊ฐ„
  • end: ๊ฐœ๊ฐ•์ดํšŒ ์ข…๋ฃŒ ์‹œ๊ฐ„
  • stream: ๊ฐœ๊ฐ•์ดํšŒ ์ŠคํŠธ๋ฆฌ๋ฐ ์ข…๋ฃŒ ์‹œ๊ฐ„
  • attend: ์ถœ์„๋ถ€
  • time: ์ฑ„ํŒ… ์‹œ๊ฐ„
  • name: ์ฑ„ํŒ… ์ž‘์„ฑ์ž

 


input ๊ฐœ์ˆ˜๋ฅผ ๋ชจ๋ฅผ ๋•Œ ์ž…๋ ฅ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

while True:
    try:
        time, name = input().split()
    except:
        break

while True๋ฌธ์œผ๋กœ ์ž…๋ ฅ์„ ๊ณ„์† ๋ฐ›๋‹ค๊ฐ€ EOF๋ฅผ ๋งŒ๋‚˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ except๋ฌธ์œผ๋กœ ์บ์น˜ํ•ด break๋กœ ์ž…๋ ฅ์„ ์ค‘๋‹จ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

 

 

list์™€ set์˜ ์†๋„ ์ฐจ์ด

 

(์ฒซ ์‹œ๋„)
attend๋ฅผ list๋กœ ๋งŒ๋“ค๊ณ  append๋กœ ์ถ”๊ฐ€, remove๋กœ ์‚ญ์ œํ–ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚ฌ์Šต๋‹ˆ๋‹ค.

 

(๋‹ค์Œ ์‹œ๋„)
์ค‘๋ณต์ฒ˜๋ฆฌ๋„ ํ•ด์ค˜์•ผ ํ•˜๋‹ˆ๊นŒ attend๋ฅผ set์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜๋„ ๊ดœ์ฐฎ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์— set์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  add๋กœ ์ถ”๊ฐ€, remove๋กœ ์‚ญ์ œํ–ˆ๋”๋‹ˆ ์ •๋‹ต์ฒ˜๋ฆฌ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ๊ฑด์ง€ ๊ถ๊ธˆํ•ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค.

  • list ์‹œ๊ฐ„๋ณต์žก๋„
    append: O(1)
    remove: O(N)
  • set ์‹œ๊ฐ„๋ณต์žก๋„
    add: O(1)
    remove: O(1)
    ์‚ฌ์ง„์ถœ์ฒ˜ https://lsh424.tistory.com/59