chyam

[프로그래머스 Lv1, python] - 노란불 신호등 본문

프로그래머스/LV1

[프로그래머스 Lv1, python] - 노란불 신호등

chyam_eun 2026. 7. 13. 14:01

https://school.programmers.co.kr/learn/courses/30/lessons/468371

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

# 제출한 풀이. 좀더 복잡하게 풀었다..

def solution(signals):
    answer = 0
    y_time = [] # 노란불 시간 [[시작,끝+1]]
    period = [sum(s) for s in signals] # 각각 주기 
    length = len(signals)
    for r, y, g in signals:
        y_time.append([r+1,r+y+1])

    dictionary = {} # 각각 노란불의 시간을 저장함..

    for i in range(100000):
        for j in range(length):
            start, end = y_time[j]
            for s in range(start, end):
                tmp = s+period[j]*i
                if tmp not in dictionary: # 없는거 
                    dictionary[tmp] = 1
                else: # 있는거
                    dictionary[tmp] += 1
                if dictionary[tmp] == length: # 갯수가 맞으면 정전!
                    return tmp

    return -1
# 다른 사람들 풀이
def solution(signals):
    from math import gcd # 최대 공약수 

    def lcm(a, b): # 최소공배수 
        return a * b // gcd(a, b)

    L = 1
    for r, y, g in signals:
        L = lcm(L, r + y + g) # 모든것의 최소공배수

    for t in range(L):
        ok = True

        for r, y, g in signals:
            p = r + y + g
            mod = t % p # 나머지

            # 노란불인지 확인
            if not (r < mod <= r + y):
                ok = False
                break

        if ok:
            return t

    return -1