Today Sangmin Learned
728x90

문제

프로그래머스 level3 입국심사 문제를 변형한 문제이다.
공항에서 사람들의 입국을 심사하는 심사대가 k(k = 1 혹은 2)개있다. 사람들이 입국심사를 받기 위하여, 심사대 바로 앞에서 한 줄로 서서 기다린다. k개의 심사대 중 하나가 비어있으면(심사받는 사람이 없으면), 먼저 도착한 사람이 비어 있는 이 심사대에서 심사를 받는다. 입국심사를 받기 위한 각 사람의 심사대 앞에 도착하는 시간과 심사받는데 걸리는 시간이 주어진다. 각 사람이 심사대 앞에 도착한 시간에 대한 정보는, 바로 이전 사람이 심사대 앞에 도착한 시간과의 차이(분)로 주어진다. 각 사람이 심사를 받기 위하여 기다리는 시간 (심사시간은 제외)의 평균을 소수점 이하 1자리까지 (소수점 이하 2째 자리에서 반올림) 출력하는 프로그램을 작성하시오.

5명의 사람들의 도착시간에 대한 정보가 0, 2, 1, 2, 1이고, 심사받는데 걸리는 시간이 각각 4분, 7분, 6분, 5분, 3분이라 하자. 5명의 도착시간에 대한 정보 0, 2, 1, 2, 1가 의미하는 것은 다음과 같다: 2번째 사람은 첫 번째 사람이 심사대 앞에 도착한 시간 2분 후에 심사대 앞에 도착하고, 3번째 사람은 2번째 사람이 도착한 시간 1분 후에 심사대 앞에 도착하고, 4번째 사람은 3번째 사람이 도착한 시간 2분 후에 심사대 앞에 도착하고, 5번째 사람은 4번째 사람이 도착한 시간 1분 후에 심사대 앞에 도착한다.

1) k = 1인 경우
첫 번째 사람은 기다리지 않고 심사를 받는다. 두 번째 사람은 첫 번째 사람이 심사를 받은 직후, 심사를 받으므로 2분을 기다린다. 세 번째, 네 번째, 다섯 번째 사람은 각각 8분, 12분, 16분 기다린다. 따라서 5명이 심사대 앞에서 기다리는 평균시간은 (2+8+12+16)/5 =38/5 = 7.6분이다.

2) k = 2인 경우 (아직 못풀음)
심사대가 2개이므로 첫 번째 사람과 두 번째 사람은 각각 심사대 1과 심사대 2에서 기다리지 않고 심사를 받는다. 세 번째 사람은 1분을 기다리고 심사대 1에서 심사를 받는다. 네 번째 사람은 4분을 기다리고 심사대 2에서 심사를 받는다. 다섯 번째 사람은 4분을 기다리고 심사대 1에서 심사를 받는다. 따라서 5명이 심사대 앞에서 기다리는 평균시간은 (0 + 0 + 1 + 4 + 4) / 5 = 1.8분이다.

입력 형식

첫 번째 줄에 심사대 앞에 도착하는 사람들의 수 n이 주어진다. 다음의 각 줄에 먼저 온 사람부터 각 사람의 심사대 앞 도착시간에 대한 정보(분 단위 양의 정수)과 심사받는데 걸리는 시간(분 단위의 양의 정수)이 주어진다.

입력 예 - 1번

5 // n
0 4
2 7
1 6
2 5
1 3

출력 예 - 1번

7.6

나의 코드

n = int(input())

waitt = 0
arvt = []
judgt = []
total_time = 0
total_wait_time = 0
sum_arvt = []
sum_number = 0

for y in range(n):
    arvt_idx, judgt_idx = map(int, input().split())
    arvt.insert(y, arvt_idx)
    judgt.insert(y, judgt_idx)

sum_number = 0
sum_list = []
for i in arvt:
    sum_number += i
    sum_list.append(sum_number)

for i in range(0, n-1): # n까지 돌면서
    total_time = sum_list[i] + waitt + judgt[i]
    if sum_list[i+1] >= total_time:
        waitt = 0
    else:
        waitt = total_time - sum_list[i+1]
    total_wait_time += waitt

print(round(total_wait_time/n, 1))

풀이

이전 사람이 심사대에 있는 전체 시간을 다음 사람이 심사대에 도착하는 시간과 비교해서 전자가 더 크면 전자에서 후자를 뺀 값을 waitt라는 변수에 부여하고, 각 for문마다 total_wait_time이라는 변수에 값을 다 넣어줬다. 반면에 다음 사람이 심사대에 도착하는 시간이 이전 사람이 심사대에 있는 전체 시간보다 클 경우에, 이 사람은 대기 시간이 없이 바로 입국심사를 받게 된다. 따라서 waitt에 어떠한 값도 추가하지 않는다.

이렇게 for문을 다 돈 후에 전체 시간을 n으로 나누고 소수 둘째 자리에서 반올림하여 해결했다.

profile

Today Sangmin Learned

@steadily-worked

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!