[COS Pro 1급 Python] 2차 기출문제 2) 지하철 기다리기

정은·2023년 8월 6일

COS Pro 1급

목록 보기
13/26
post-thumbnail

문제 2)

A 지하철역의 오늘 하루 지하철 도착 시각이 순서대로 들어있는 리스트가 있습니다. 현재 시간이 주어졌을 때, 지하철을 타기위해서는 최소 몇 분을 기다려야 하는지 구하려 합니다. 이를 위해 다음과 같이 프로그램 구조를 작성했습니다.

1. 00:00을 기준으로 해서 현재 시각을 분 단위로 변환합니다.
2. 리스트를 순회하며 다음을 수행합니다.
  2-1. 00:00을 기준으로, 각 지하철 도착 시각을 분 단위로 변환합니다.
  2-2. 현재 시각과 지하철 도착 시각을 비교하여 최소 대기 시간을 구합니다.
3. 2번 단계에서 구한 최소 대기 시간을 return 합니다.

오늘 하루 동안의 지하철 도착 시각이 순서대로 들어있는 리스트 subway_times와 현재시간 current_time이 매개변수로 주어질 때, 지하철을 타기 위해 기다려야 하는 최소 대기 시간을 return 하도록 solution 함수를 작성했습니다. 이때, 위 구조를 참고하여 중복되는 부분은 func_a라는 함수로 작성했습니다. 코드가 올바르게 동작할 수 있도록 빈칸을 알맞게 채워 전체 코드를 완성해주세요.


매개변수 설명

오늘 하루 동안의 지하철 도착 시각이 순서대로 들어있는 리스트 subway_times와 현재시간 current_time이 solution 함수의 매개변수로 주어집니다.

  • subway_times의 길이는 1 이상 100 이하입니다.
  • subway_times에는 지하철 도착 시간이 중복없이 들어있습니다.
  • 지하철 도착 시각과 현재 시각은 24시간 표기법을 이용하여 나타냅니다.
    • 24시간 표기법은 00:00부터 23:59까지로 시간을 표기합니다.
    • 입력으로 주어지는 시간은 항상 "XX:YY"형태로 주어집니다.
  • 지하철 첫차 도착 시각은 05:00 이후이며, 막차 도착 시각은 23:59 이전입니다.

return 값 설명

지하철을 타기 위해 기다려야 하는 최소 대기 시간을 return 해주세요.

  • 만약 오늘 탈 수 있는 지하철이 없다면 -1을 return 하면 됩니다.

예시
subway_timescurrent_timereturn
["05:31", "11:59", "13:30", "23:32"]"12:00"90
["14:31", "15:31"]"15:31"0
예시 설명

예시 #1
현재시간 12:00에서 가장 가까운 지하철 도착 시각은 13:30입니다.
따라서 최소 90분을 기다려야 합니다.

예시 #2
현재 시각은 15:31이며, 15:31분에 도착하는 지하철에 탑승할 수 있습니다. 따라서 0분만 기다리면 됩니다.

주어진 문제 2) 코드

def func_a(times):
    hour = int(times[:2])
    minute = int(times[3:])
    return hour*60 + minute

def solution(subway_times, current_time):
    current_minute = func_a(@@@)
    INF = 1000000000
    answer = INF
    for s in subway_times:
        subway_minute = func_a(@@@)
        if @@@:
            answer = subway_minute - current_minute
            break
    if answer == INF:
        return -1
    return answer

#아래는 테스트케이스 출력을 해보기 위한 코드입니다.

subway_times1 = ["05:31", "11:59", "13:30", "23:32"]
current_time1 = "12:00"
ret1 = solution(subway_times1, current_time1)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret1, "입니다.")

subway_times2 = ["14:31", "15:31"]
current_time2 = "15:31"
ret2 = solution(subway_times2, current_time2)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret2, "입니다.")

Solution

주어진 문제 2) Solution 코드

def func_a(times):
    hour = int(times[:2])
    minute = int(times[3:])
    return hour*60 + minute

def solution(subway_times, current_time):
    current_minute = func_a(current_time)
    INF = 1000000000
    answer = INF
    for s in subway_times:
        subway_minute = func_a(s)
        if subway_minute >= current_minute:
            answer = subway_minute - current_minute
            break
    if answer == INF:
        return -1
    return answer

#아래는 테스트케이스 출력을 해보기 위한 코드입니다.

subway_times1 = ["05:31", "11:59", "13:30", "23:32"]
current_time1 = "12:00"
ret1 = solution(subway_times1, current_time1)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret1, "입니다.")

subway_times2 = ["14:31", "15:31"]
current_time2 = "15:31"
ret2 = solution(subway_times2, current_time2)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret2, "입니다.")

문제 2) Solution 전체 코드 [본인 작성]

def func_a(times):
    # 1. 00:00을 기준, 현재 시각을 문 단위로 변환
    hour = int(times.split(':')[0]) # int(times[:2]) 이런 식도 가능
    minute = int(times.split(':')[1]) # int(times[3:]) 이런 식도 가능
    return hour*60 + minute

def solution(subway_times, current_time):
    # 2. 리스트를 순회하며 다음을 수행
    current_minute = func_a(current_time) # 현재 시각을 분 단위로 변환

    answer = -1
    for subway_time in subway_times:
        # 00:00을 기준 각 지하철 도착 시각을 분 단위로 변환
        subway_minute = func_a(subway_time)
        # 현재 시각과 지하철 도착 시각을 비교하여 최소 대기 시간을 구함
        if subway_minute >= current_minute:
            answer = subway_minute - current_minute
            break
    # 3. (오늘 탈 수 있는 지하철이 없으면 -1 return) 2번 단계에서 구한 최소 대기 시간을 return
    if answer < 0:
        return -1
        
    return answer

#아래는 테스트케이스 출력을 해보기 위한 코드입니다.

subway_times1 = ["05:31", "11:59", "13:30", "23:32"]
current_time1 = "12:00"
ret1 = solution(subway_times1, current_time1)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret1, "입니다.")

subway_times2 = ["14:31", "15:31"]
current_time2 = "15:31"
ret2 = solution(subway_times2, current_time2)

#[실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
print("solution 함수의 반환 값은", ret2, "입니다.")
  • func_a() 함수는 문자열 형태(hh:mm)로 전달받은 시각 값을 분 단위로 수로 변화시킨 정수 값을 return

    시간 = int(times[:2]) * 60
    분 = int(times[3:])

프로그램의 알고리즘에 맞도록 func_a() 함수에 적절한 인수를 전달하고 비어 있는 조건식을 완성하는 문제이다.

profile
정니의 이런거 저런거 기록 일지 😛

0개의 댓글