백준 27885 가희와 열리지 않는 건널목 문제 풀이
문제 파악하기
- 건널목을 통과하는 열차가 없다면 차단기가 올라갑니다. 그렇지 않으면 차단기가 내려갑니다.
- 열차가 건널목을 접근(=통과하기 시작)하면 40초 뒤 완전히 빠져나갑니다.
- 상행 열차와 하행 열차가 동시에 통과할 수 있습니다.
- 같은 방향의 열차 간격은 60초 이상입니다.
문제는 건널목의 차단기가 올라가있는 시간을 초 단위로 출력할 것을 요구합니다.
총 통과 시간을 단순히 열차 통과 횟수 * 40
로 처리하기에는 상행 열차와 하행 열차가 동시에 통과할 수 있다는 조건으로 인해 오답을 받을 수 있습니다.
상행 열차와 하행 열차가 동시에 통과하는 순간이 있다면 열차의 통과 시간은 열차 통과 횟수 * 40
보다 줄어들 것입니다.
1
2
3
4
5
6
05:00:00 상행선 열차 진입
05:00:10 하행선 열차 진입
05:00:40 상행선 열차 통과
05:00:50 하행선 열차 통과
총 통과 시간: 00:00:50
따라서 상/하행선이 동시에 통과하는 순간을 고려해야 합니다.
또 < 40초
간격으로 같은 방향의 열차가 통과하는 경우는 논리적으로도, 조건상으로도 맞지 않으니 고려하지 않아도 됩니다.
즉, 상행 열차와 하행 열차를 분리하여 처리할 필요가 없습니다. 모두 같은 유형의 열차 통과 사건으로 처리합니다.
문제 풀어보기
참고: 유닉스 시간
유닉스 시간은 1970년 1월 1일 00시 00분 00초로부터 경과 시간을 초로 환산한 정수로 나타낸 값입니다.
이 값은 년도, 월, 일, 시, 분, 초를 모두 하나의 정수로 압축한다는 점에서 유용합니다.
유닉스 시간과 같이, 이 문제는 모든 시각값을 초로 환산한 정수로 처리할 수 있습니다.
1
now: int = h * 60 * 60 + m * 60 + s
문제가 초 단위로 출력을 요구하므로, 사실 문제가 초 단위가 아니라 시:분:초 형식으로 출력을 요구하더라도 이 방법은 유효하게 사용할 수 있습니다.
1
2
if time - prev >= 40: passing = 40
else: passing = time - prev
모든 시각값이 초로 환산된 정수로 처리되므로 별도의 시각 계산 없이 다음과 같은 조건을 사용하여 총 통과 시간을 계산합니다.