본문 바로가기
알고리즘

[BAEKJOON] 27885 가희와 열리지 않는 건널목

by mAlfred 2025. 3. 28.
반응형

문제

건널목이란, 철로와 도로의 교차점을 말합니다. 열차가 건널목을 지나갈 때, 차나 사람이 지나가지 못하도록 차단기가 내려갑니다.

건널목 중에서는 열차가 자주 지나가서 잘 열리지 않는 건널목이 있습니다. 대표적으로 서울역 근처에 있는 서소문 건널목과 게이큐 본선에 있는 시나가와 건널목이 있습니다.

가희가 살고 있는 동네에는 산성대로 건널목이 하나 있습니다. 산성대로 건널목은 복선으로 이루어진 노선이 하나 지나가며, 상행 열차와 하행 열차가 접근할 수 있습니다. 이 건널목의 동작 방식은 아래와 같습니다.

  • 산성대로 건널목을 통과하고 있는 열차가 없으면 차단기가 올라갑니다. 그렇지 않으면 차단기가 내려갑니다.
  • 열차가 산성대로 건널목에 접근하면, 40초 후에 완전히 빠져나갑니다. 예를 들어, 열차가 11시 10분 15초에 산성대로 건널목에 접근한 경우
    • 11시 10분 15초부터 11시 10분 55초가 될 때까지 열차는 산성대로 건널목을 통과하게 됩니다.
    • 11시 10분 55초가 되었을 때, 완전히 빠져나갑니다.

하루 동안 상행 열차와 하행 열차가 산성대로 건널목에 접근하는 시각이 주어졌을 때, 몇 초 동안 산성대로 건널목의 차단기가 올라가는지 구해주세요.

입력

첫 번째 줄에 상행 열차 수 c와 하행 열차 수 h가 주어집니다.

다음 c개의 줄에 상행 열차가 산성대로 건널목에 접근한 시각이 hh:mm:ss 형식으로 주어집니다. 먼저 접근한 순서대로 주어집니다.

다음 h개의 줄에 하행 열차가 산성대로 건널목에 접근한 시각이 hh:mm:ss 형식으로 주어집니다. 먼저 접근한 순서대로 주어집니다.

출력

문제에 대한 답을 구해주세요.

제한

  • 1  c  600
  • 1  h  600
  • 같은 방향의 열차 간격은 60초 이상입니다.
  • 주어진 열차 외에 다른 열차가 산성대로 건널목에 접근하지 않습니다.
  • 같은 방향으로 향하는 모든 열차는 같은 선로를 사용합니다.
  • 두 열차의 방향이 다르다면, 다른 선로를 사용합니다.
  • 문제에서 주어지는 모든 시각은 05시 00분 00초 이후이고, 23시 59분 01초 이전입니다.
  • 윤초는 무시합니다.

예제 입력 1 복사

1 1
05:00:00
06:00:00

예제 출력 1 복사

86320

힌트

  • 복선이란, 2개의 궤도로 구성되어 있는 선로를 말합니다. 문제에서의 복선은 상행, 하행으로 이루어져 있는 선로를 의미합니다.

처음에 삽질을 꽤 많이 했다.

사실 선로에 상행 하행이 무슨 의미인지 잘 몰랐음 ..

 

그냥 서로 곂친?거에 대해 더해주면 되는거 아닌가? 싶었음제

건널목이란, 철로와 도로의 교차점을 말합니다. 열차가 건널목을 지나갈 때, 차나 사람이 지나가지 못하도록 차단기가 내려갑니다.

 

건널목 중에서는 열차가 자주 지나가서 잘 열리지 않는 건널목이 있습니다. 대표적으로 서울역 근처에 있는 서소문 건널목과 게이큐 본선에 있는 시나가와 건널목이 있습니다.

 

가희가 살고 있는 동네에는 산성대로 건널목이 하나 있습니다. 산성대로 건널목은 복선으로 이루어진 노선이 하나 지나가며, 상행 열차와 하행 열차가 접근할 수 있습니다. 이 건널목의 동작 방식은 아래와 같습니다.

 

산성대로 건널목을 통과하고 있는 열차가 없으면 차단기가 올라갑니다. 그렇지 않으면 차단기가 내려갑니다.

열차가 산성대로 건널목에 접근하면, 40초 후에 완전히 빠져나갑니다. 예를 들어, 열차가 11시 10분 15초에 산성대로 건널목에 접근한 경우

11시 10분 15초부터 11시 10분 55초가 될 때까지 열차는 산성대로 건널목을 통과하게 됩니다.

11시 10분 55초가 되었을 때, 완전히 빠져나갑니다.

하루 동안 상행 열차와 하행 열차가 산성대로 건널목에 접근하는 시각이 주어졌을 때, 몇 초 동안 산성대로 건널목의 차단기가 올라가는지 구해주세요.

 

입력

첫 번째 줄에 상행 열차 수 c와 하행 열차 수 h가 주어집니다.

 

다음 c개의 줄에 상행 열차가 산성대로 건널목에 접근한 시각이 hh:mm:ss 형식으로 주어집니다. 먼저 접근한 순서대로 주어집니다.

 

다음 h개의 줄에 하행 열차가 산성대로 건널목에 접근한 시각이 hh:mm:ss 형식으로 주어집니다. 먼저 접근한 순서대로 주어집니다.

 

출력

문제에 대한 답을 구해주세요.

 

제한

1 ≤ c ≤ 600

1 ≤ h ≤ 600

같은 방향의 열차 간격은 60초 이상입니다.

주어진 열차 외에 다른 열차가 산성대로 건널목에 접근하지 않습니다.

같은 방향으로 향하는 모든 열차는 같은 선로를 사용합니다.

두 열차의 방향이 다르다면, 다른 선로를 사용합니다.

문제에서 주어지는 모든 시각은 05시 00분 00초 이후이고, 23시 59분 01초 이전입니다.

윤초는 무시합니다.

예제 입력 1 복사

1 1

05:00:00

06:00:00

예제 출력 1 복사

86320

힌트

복선이란, 2개의 궤도로 구성되어 있는 선로를 말합니다. 문제에서의 복선은 상행, 하행으로 이루어져 있는 선로를 의미합니다.

처음에 삽질을 꽤 많이 했다.

 

사실 선로에 상행 하행이 무슨 의미인지 잘 몰랐음 ..

 

그냥 서로 곂친?거에 대해 더해주면 되는거 아닌가? 싶었음

 

 

근데 그냥 한 길에 철도가 두개인거 생각하면 됐던거임...

문제를 너무 어렵게 생각했었나봄 ㅎㅎ..!

 

아무튼 그렇다면 리스트를 2개로 굳이 해줄 필요 없이 정렬을 해서 시간대끼리 diff를 시켜서 40초보다 넘는지 체크하면 되는 문제

 

 

만약 곂친다면 서로 차에 대한 값을 더해주면 됨

위는 예시 이미지

 

import sys
c, h = map(int, sys.stdin.readline().split())
t = 86400

tl = []
dfs = []

for i in range(c):
    th, tm, ts = map(int, input().split(':'))
    tt = (th*3600) + (tm*60) + ts
    tl.append(tt)

for i in range(h):
    th, tm, ts = map(int, input().split(':'))
    tt = (th*3600) + (tm*60) + ts
    tl.append(tt)

tl.sort()
m = 40
c = tl[0]
for i in range(1, len(tl)):
    x = tl[i] - c
    if x >= 40:
        m += 40
    else:
        m += x
    c = tl[i]

t -= m
print(t)

반응형

'알고리즘' 카테고리의 다른 글

[BAEKJOON] 4758 Filling Out the Team  (0) 2025.05.15
[BAEKJOON] 26082 WARBOY  (0) 2025.04.17
[BAEKJOON] 25840 Sharing Birthdays  (0) 2025.03.28
[BAEKJOON] 27541 末尾の文字 (Last Letter)  (0) 2025.03.28
[UNKOWN] 회문 판별 재귀 구현  (0) 2025.02.06