📖 문제
🧑🏻💻 풀이 과정
1) 문제 이해 및 접근
사람들이 기다리기 시작할떄 시간을 분으로 변경하여버스 시간이 올때마다 몇명의 대기 사람이 있는지 구했습니다.
무조건 마지막 버스에 탑승하면 되므로, 마지막 버스의 마지막으로 탑승한 사람보다 먼저 도착하면 되도록 접근하였습니다.
2) 알고리즘
- 문자열
- 구현
3) 풀이 코드
사용 언어 - Python
def solution(n, t, m, timetable):
answer = 0
bus = 540 # 버스의 첫 시작 시간 (분)
waiting = 0 # 기다리는 사람의 수
time_line = [] # 사람들이 기다리기 시작하는 시간 리스트
for time in timetable: # 사람들 줄서는 시간들을 분으로 계산하여 분으로 바꾸어 저장
minute = int(time[:2]) * 60 + int(time[3:])
time_line.append(minute)
time_line.sort() # 사람들 시작 시간이 순서대로 들어오지 않으므로 오름차순 정렬
idx = 0
for bus in range(540, 540 + n*t, t): # 버스 시간 순서대로 반복
while idx < len(time_line) and time_line[idx] <= bus: # 버스 도착하기전에 사람들이 도착하는 경우에
waiting += 1 # 기다리는 사람 추가
idx += 1
waiting -= m # 버스 도착하면 m 명 사람을 태움
if bus == 540 + t*(n-1): # 마지막 버스 도착하면 종료
break
waiting = max(0, waiting) # 기다리는 사람이 -가 되는 경우, 대기 인원이 아무도 없는 경우이므로 0명으로 세팅
if waiting < 0: # 마지막 버스에 바로 탈 수 있으면
answer = bus # 버스 도착하는 시간에 도착하면 됨
else:
answer = time_line[idx-waiting-1] - 1 # 그 외, 마지막 버스에 마지막으로 탄 크루보다 1분만 빨리도착하면 됨
return f'{answer//60 if answer//60 >= 10 else f"0{answer//60}"}:{answer%60 if answer%60 >= 10 else f"0{answer%60}"}'
📝 결과 및 학습한 내용
1) 어려웠던 내용
시뮬레이션 방식으로 작성하였으나 조건을 구분하여 결과를 구하는 방식에 어려움을 겪었습니다.
마지막 버스의 마지막에 탑승하면 된다는 조건으로 접근이 어려웠습니다.
2) 새롭게 학습한 내용
특별히 없습니다.
🔗 문제 링크
- https://programmers.co.kr/learn/courses/30/lessons/17678#
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > Python' 카테고리의 다른 글
[프로그래머스] 경주로 건설 (0) | 2022.02.21 |
---|---|
[프로그래머스] 합승 택시 요금 (0) | 2022.02.20 |
[프로그래머스] 추석 트래픽 (0) | 2022.02.18 |
[프로그래머스] 표 편집 (0) | 2022.02.17 |
[프로그래머스] 불량 사용자 (0) | 2022.02.16 |
댓글