Algorithm/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PythonํŒŒ์ด์ฌ] ์…”ํ‹€๋ฒ„์Šค(2018 ์นด์นด์˜ค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ 1์ฐจ)

meeeeejin 2021. 4. 27. 21:12

๋ฌธ์ œ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/17678

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - [1์ฐจ] ์…”ํ‹€๋ฒ„์Šค

10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00"

programmers.co.kr

 

 

๋ฌธ์ œ ์„ค๋ช…

์‹œ๊ฐ„ ๊ณ„์‚ฐ์„ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ "HH:MM" ํ˜•์‹์˜ ์‹œ๊ฐ„์„ ๋ชจ๋‘ ๋ถ„์œผ๋กœ ๋ณ€ํ™˜ํ•ด์„œ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด "09:10"์ธ ๊ฒฝ์šฐ 9*60 + 10 = 550(๋ถ„)์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ •์ˆ˜ ๋น„๊ต ์—ฐ์‚ฐ์„ ํ†ตํ•ด ๋ˆ„๊ฐ€ ๋จผ์ € ์™”๋Š”์ง€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

  • crewTime ๋ฆฌ์ŠคํŠธ์— ๊ฐ ํฌ๋ฃจ๊ฐ€ ๋„์ฐฉํ•˜๋Š” ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 
  • ๋จผ์ € ์˜จ ํฌ๋ฃจ๊ฐ€ ์•ž์— ์˜ค๋„๋ก crewTime์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. 
  • busTime ๋ฆฌ์ŠคํŠธ์— 9:00๋ถ€ํ„ฐ t๋ถ„ ๊ฐ„๊ฒฉ์œผ๋กœ n๋ฒˆ ๋„์ฐฉํ•˜๋Š” ๋ฒ„์Šค ์‹œ๊ฐ„์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. 
  • ๋ฒ„์Šค๊ฐ€ ๋„์ฐฉํ•  ๋•Œ๋งˆ๋‹ค(busTime์˜ ์š”์†Œ๋งˆ๋‹ค) ๋ฒ„์Šค์— ํƒ€๋Š” ํฌ๋ฃจ์˜ ์ˆ˜(cnt)๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. 
  • ๋ฒ„์Šค์— ์ž๋ฆฌ๊ฐ€ ๋‚จ๋Š” ๊ฒฝ์šฐ ์ฝ˜์€ ๋ฒ„์Šค ๋„์ฐฉ ์‹œ๊ฐ„์— ๋„์ฐฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 
  • ๋ฒ„์Šค์— ์ž๋ฆฌ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ฝ˜์€ ๋งจ ๋งˆ์ง€๋ง‰์— ๋ฒ„์Šค์— ํƒ„ ํฌ๋ฃจ๋ณด๋‹ค 1๋ถ„ ๋จผ์ € ๋„์ฐฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

๋ฒ„์Šค์— ํƒ€๋Š” ํฌ๋ฃจ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

while cnt < m and i < len(crewTime) and crewTime[i] <= tm:
	i += 1
	cnt += 1

์ด๋•Œ ๊ฐ ์กฐ๊ฑด์€ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

cnt < m			# ๋ฒ„์Šค์— ์ž๋ฆฌ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค
i < len(crewTime)	# ํƒ‘์Šนํ•  ํฌ๋ฃจ๊ฐ€ ๋‚จ์•„์žˆ๋‹ค
crewTime[i] <= tm	# ํ•ด๋‹น ํฌ๋ฃจ๊ฐ€ ๋ฒ„์Šค ๋„์ฐฉ ์‹œ๊ฐ„ ์ „์— ๋„์ฐฉํ–ˆ๋‹ค

 

 

 

 

์†Œ์Šค์ฝ”๋“œ
def solution(n, t, m, timetable):
    answer = 0
    # ๋ชจ๋“  ์‹œ๊ฐ„์„ ๋ถ„์œผ๋กœ ํ™˜์‚ฐํ•ด์„œ ์ƒ๊ฐ
    # ์˜ˆ์‹œ: "09:10" => 9*60 + 10 = 550(๋ถ„)
    # ํฌ๋ฃจ ๋„์ฐฉ ์‹œ๊ฐ ๋ฆฌ์ŠคํŠธ
    crewTime = [int(time[:2])*60 + int(time[3:]) for time in timetable]
    crewTime.sort()
    # ๋ฒ„์Šค ๋„์ฐฉ ์‹œ๊ฐ ๋ฆฌ์ŠคํŠธ
    busTime = [9*60 + t*i for i in range(n)]

    i = 0       # ๋‹ค์Œ์— ๋ฒ„์Šค์— ์˜ค๋ฅผ ํฌ๋ฃจ์˜ ์ธ๋ฑ์Šค
    for tm in busTime:
      cnt = 0   # ๋ฒ„์Šค์— ํƒ€๋Š” ํฌ๋ฃจ ์ˆ˜
      while cnt < m and i < len(crewTime) and crewTime[i] <= tm:
        i += 1
        cnt += 1
      # ๋ฒ„์Šค์— ์ž๋ฆฌ๊ฐ€ ๋‚จ์•˜์„ ๊ฒฝ์šฐ
      if cnt < m: answer = tm
      # ๋ฒ„์Šค์— ์ž๋ฆฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ๋งจ ๋งˆ์ง€๋ง‰ ํฌ๋ฃจ๋ณด๋‹ค 1๋ถ„ ๋จผ์ € ๋„์ฐฉ
      else: answer = crewTime[i - 1] - 1

    return str(answer//60).zfill(2) + ":" + str(answer%60).zfill(2)

 

 

 

 

 

 

728x90