πŸ’†πŸ»‍♂️ ν”Ό-μ—μŠ€/🐣 ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

[μŠ€μœ„ν”„νŠΈ μ•Œκ³ λ¦¬μ¦˜] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€: μΆ”μ„νŠΈλž˜ν”½

κ°œλ°œν•˜λŠ” ν›ˆμ΄ 2021. 9. 18. 18:53

문제

https://programmers.co.kr/learn/courses/30/lessons/17676

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - [1μ°¨] 좔석 νŠΈλž˜ν”½

μž…λ ₯: [ "2016-09-15 20:59:57.421 0.351s", "2016-09-15 20:59:58.233 1.181s", "2016-09-15 20:59:58.299 0.8s", "2016-09-15 20:59:58.688 1.041s", "2016-09-15 20:59:59.591 1.412s", "2016-09-15 21:00:00.464 1.466s", "2016-09-15 21:00:00.741 1.581s", "2016-09-1

programmers.co.kr

 

이번 좔석에도 μ‹œμŠ€ν…œ μž₯μ• κ°€ μ—†λŠ” λͺ…μ ˆμ„ 보내고 싢은 μ–΄ν”ΌμΉ˜λŠ” μ„œλ²„λ₯Ό 증섀해야 ν• μ§€ 고민이닀. μž₯μ•  λŒ€λΉ„μš© μ„œλ²„ 증섀 μ—¬λΆ€λ₯Ό κ²°μ •ν•˜κΈ° μœ„ν•΄ μž‘λ…„ 좔석 기간인 9μ›” 15일 둜그 데이터λ₯Ό λΆ„μ„ν•œ ν›„ μ΄ˆλ‹Ή μ΅œλŒ€ μ²˜λ¦¬λŸ‰μ„ κ³„μ‚°ν•΄λ³΄κΈ°λ‘œ ν–ˆλ‹€. μ΄ˆλ‹Ή μ΅œλŒ€ μ²˜λ¦¬λŸ‰μ€ μš”μ²­μ˜ 응닡 μ™„λ£Œ 여뢀에 관계없이 μž„μ˜ μ‹œκ°„λΆ€ν„° 1초(=1,000λ°€λ¦¬μ΄ˆ)κ°„ μ²˜λ¦¬ν•˜λŠ” μš”μ²­μ˜ μ΅œλŒ€ 개수λ₯Ό μ˜λ―Έν•œλ‹€.

μž…λ ₯ ν˜•μ‹

  • solution ν•¨μˆ˜μ— μ „λ‹¬λ˜λŠ” lines λ°°μ—΄μ€ N(1 ≦ N β‰¦ 2,000)개의 둜그 λ¬Έμžμ—΄λ‘œ λ˜μ–΄ 있으며, 각 둜그 λ¬Έμžμ—΄λ§ˆλ‹€ μš”μ²­μ— λŒ€ν•œ μ‘λ‹΅μ™„λ£Œμ‹œκ°„ S와 μ²˜λ¦¬μ‹œκ°„ Tκ°€ 곡백으둜 κ΅¬λΆ„λ˜μ–΄ μžˆλ‹€.
  • μ‘λ‹΅μ™„λ£Œμ‹œκ°„ SλŠ” μž‘λ…„ 좔석인 2016λ…„ 9μ›” 15일만 ν¬ν•¨ν•˜μ—¬ κ³ μ • 길이 2016-09-15 hh:mm:ss.sss ν˜•μ‹μœΌλ‘œ λ˜μ–΄ μžˆλ‹€.
  • μ²˜λ¦¬μ‹œκ°„ TλŠ” 0.1s, 0.312s, 2s μ™€ 같이 μ΅œλŒ€ μ†Œμˆ˜μ  μ…‹μ§Έ μžλ¦¬κΉŒμ§€ κΈ°λ‘ν•˜λ©° λ’€μ—λŠ” 초 λ‹¨μœ„λ₯Ό μ˜λ―Έν•˜λŠ” s둜 λλ‚œλ‹€.
  • 예λ₯Ό λ“€μ–΄, 둜그 λ¬Έμžμ—΄ 2016-09-15 03:10:33.020 0.011s은 "2016λ…„ 9μ›” 15일 μ˜€μ „ 3μ‹œ 10λΆ„ 33.010초"λΆ€ν„° "2016λ…„ 9μ›” 15일 μ˜€μ „ 3μ‹œ 10λΆ„ 33.020초"κΉŒμ§€ "0.011초" λ™μ•ˆ 처리된 μš”μ²­μ„ μ˜λ―Έν•œλ‹€. (μ²˜λ¦¬μ‹œκ°„μ€ μ‹œμž‘μ‹œκ°„κ³Ό λμ‹œκ°„μ„ 포함)
  • μ„œλ²„μ—λŠ” νƒ€μž„μ•„μ›ƒμ΄ 3초둜 μ μš©λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ²˜λ¦¬μ‹œκ°„μ€ 0.001 ≦ T ≦ 3.000이닀.
  • lines λ°°μ—΄μ€ μ‘λ‹΅μ™„λ£Œμ‹œκ°„ Sλ₯Ό κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬λ˜μ–΄ μžˆλ‹€.

풀이

ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€κ°€ 경계값이 μ•„μ£Ό 잘 μ„€μ •λ˜μ–΄ μžˆμ–΄μ„œ λͺ¨λ“  ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όν•˜λ €λ©΄ 정말 μ˜€μ°¨μ—†μ΄ μ œλŒ€λ‘œ κ΅¬ν˜„ν•΄μ•Όν•˜λŠ” λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. 특히 μ²˜λ¦¬μ‹œκ°„μ€ μ‹œμž‘μ‹œκ°„κ³Ό λμ‹œκ°„μ„ ν¬ν•¨ν•΄μ•Όν•œλ‹€λŠ” 쑰건 λ•Œλ¬Έμ— 더 ν—·κ°ˆλ ΈμŠ΅λ‹ˆλ‹€. 

 

λ¨Όμ € μ£Όμ–΄μ§€λŠ” 각 데이터에 λŒ€ν•œ μ‹œμž‘μ‹œκ°„μ„ λ§Œλ“€μ–΄μ€λ‹ˆλ‹€. λΆ€λ™μ†Œμˆ˜μ μ„ μ‚¬μš©ν•˜λ©΄ κ°’ 손싀이 μžˆμ„ 것 κ°™μ•„ μ •μˆ˜λ‘œ κ΄€λ¦¬ν•˜λ„λ‘ κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. 그리고 λͺ¨λ“  데이터에 λŒ€ν•΄μ„œ ꡬ간을 μ„€μ •ν•œ λ’€, ν•΄λ‹Ή ꡬ간 μ•ˆμ— μžˆλŠ” μž‘μ—…λ“€μ΄ λͺ‡κ°œμΈμ§€ μ„Έμ–΄μ£ΌλŠ” κ²ƒμœΌλ‘œ ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ•Œ μš°λ¦¬κ°€ ν™•μΈν•΄μ•Όν•˜λŠ” ꡬ간쑰건을 총 μ„Έ κ°€μ§€ μž…λ‹ˆλ‹€.

 

데이터 A와 Bκ°€ μžˆμ„ λ•Œ, 

  1. Aκ°€ μ‹œμž‘ν•œ μ‹œκ°„ ~ Aκ°€ μ‹œμž‘ν•œ μ‹œκ°„ + 1μ΄ˆμ— Bκ°€ μ‹œμž‘ν•œ μ‹œκ°„μ΄λ‚˜ λλ‚œ μ‹œκ°„μ΄ ν¬ν•¨λ˜λŠ”κ°€
  2. Aκ°€ λλ‚œ μ‹œκ°„ ~ Aκ°€ λλ‚œ μ‹œκ°„ + 1μ΄ˆμ— Bκ°€ μ‹œμž‘ν•œ μ‹œκ°„μ΄λ‚˜ λλ‚œ μ‹œκ°„μ΄ ν¬ν•¨λ˜λŠ”κ°€ 
  3. Aκ°€ μ‹œμž‘ν•œ μ‹œκ°„ ~ Aκ°€ 끝낸 μ‹œκ°„μ΄ Bκ°€ μ‹œμž‘ν•œ μ‹œκ°„ ~ Bκ°€ λλ‚œ μ‹œκ°„μ— ν¬ν•¨λ˜λŠ”κ°€

μ£Όμ–΄μ§€λŠ” 예제 μΌ€μ΄μŠ€μ—λŠ” 3번 쑰건이 ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šμ•„ λ– μ˜¬λ¦¬κΈ°κ°€ μ–΄λ €μ› μŠ΅λ‹ˆλ‹€. 비ꡐ해야할 쑰건이 λ§Žμ§€λ§Œ, μŠ€μœ„ν”„νŠΈμ—μ„œλŠ” Rangeλ₯Ό μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— Range의 contains와 overlapsλ₯Ό μ‚¬μš©ν•˜λ©΄ μ‰½κ²Œ 확인이 κ°€λŠ₯ν•©λ‹ˆλ‹€. overlaps λ©”μ„œλ“œλŠ” ν˜„μž¬ λ²”μœ„μ— μ£Όμ–΄μ§€λŠ” λ²”μœ„κ°€ ν¬ν•¨λ˜λŠ”μ§€ ν™•μΈν•˜λŠ” λ©”μ„œλ“œμž…λ‹ˆλ‹€. 

 

3번 쑰건을 ν¬ν•¨ν•˜λŠ” 2, 3, 18번 μΌ€μ΄μŠ€ λ•Œλ¬Έμ— μ‹œκ°„μ„ 정말 많이 μΌλŠ”λ°, μ‹€μ œ μ‹œν—˜μœΌλ‘œ λ‚˜μ™”μœΌλ©΄ μ•„μ°”ν–ˆμ„ 것 κ°™λ„€μš”γ… 

μ½”λ“œ