개발자 톡

연습문제 톡 [HSAT 3회 정기 코딩 인증평가 기출] 교차로

인증평가 3차 교차로 반례 문의

등록일
2022-09-30 15:08:44
조회수
569
작성자
hhs511

몇일 고민을 해봐도 코드는 제대로 짠것 같은데..

오답이 많네요. 반례 제시 부탁드립니다.


import sys


n = int(input())

cross = []
for i in range(n) :
    a, b = input().split()
    a = int(a)
    b = ord(b) - 65
    cross.append([a,b,i]) #time, cross, car_number

cross.sort()
#print(cross)

q = [[],[],[],[]]  #A,B,C,D에 대한 Q 생성

t0 = cross[0][0]
c0 = cross[0][1]
n0 = cross[0][2]

q[c0].append(n0)
count_time = t0
index = 1
ans = [-1]*(n+1)
# D > A > B > C > D
# 3 > 0 > 1 > 2 > 3


flag = 0
while q[0] or q[1] or q[2] or q[3] :
    #현재 시간 기준 차량 대기
    while index < n and count_time == cross[index][0] : #동일한 시간인 경우, q에 append
        cross_num = cross[index][1]
        car_num = cross[index][2]
        q[cross_num].append(car_num)
        index += 1

    #통행 가능여부 체크 
    temp = [0] * 4
    for i in range(4) :
        if not q[(i+3)%4] and q[i] : #A가 비어있으면 B 통행 가능, D가 비어있으면 A 통행 가능
            temp[i] = 1

    #통행 실시
    count = 0
    for i in range(4) :
        if temp[i] :
            car_num = q[i].pop(0)
            ans[car_num] = count_time
            count += 1

    if count == 0 : break #교착상태

    count_time += 1

for i in range(n) :
    print(ans[i])
#[hsat_3회_정기_코딩_인증평가_기출]_교차로
#python
#교차로
#인증평가3차

이 카테고리의 톡 더보기