Algorithm/ํ๋ก๊ทธ๋๋จธ์ค
[ํ๋ก๊ทธ๋๋จธ์ค/Pythonํ์ด์ฌ] ์ ํ๋ฒ์ค(2018 ์นด์นด์ค ์ฝ๋ฉํ ์คํธ 1์ฐจ)
meeeeejin
2021. 4. 27. 21:12
๋ฌธ์ ๋งํฌ: programmers.co.kr/learn/courses/30/lessons/17678
๋ฌธ์ ์ค๋ช
์๊ฐ ๊ณ์ฐ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ "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