아이공의 AI 공부 도전기

[Baekjoon] 2980번 : 도로와 신호등 (Python, 구현, 시뮬레이션)

 

     

 

 

https://www.acmicpc.net/problem/2980

 

2980번: 도로와 신호등

상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔

www.acmicpc.net

 

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

방법 1 - 메모리 30840KB / 시간 72ms / 코드 길이 340B

 

수학적으로 신호등에 위치한 지점에서의 red time과 green time을 합한 값의 나머지가 red time보다 커야만 매끄럽게 이어갈 수 있습니다.

만약 그렇지 못하다면 빨간색 시간에서 남은 시간만큼을 추가 시간으로 더해줘야 합니다.

 

n, l = map(int, input().split())
tl = []

for _ in range(n):
    loc, r, g = map(int, input().split())
    tl.append([loc, r, g])

tl.append([l,0,0])
time = tl[0][0]

for i in range(n):
    interval = time % (tl[i][1] + tl[i][2])
    if interval < tl[i][1]:
        time += tl[i][1] - interval
    time += tl[i+1][0] - tl[i][0]

print(time)

 

방법 2 - 메모리 30840KB / 시간 76ms / 코드 길이 227B

 

방법 1을 더 간소화한 버전입니다.

 

n, l = map(int, input().split())
loc, time = 0, 0

for _ in range(n):
    c, r, g = map(int, input().split())
    time += c - loc
    loc = c
    if time % (r+g) < r:
        time += (r - time % (r+g))
time += l-loc
print(time)

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading