Thumbnail

📣코딩테스트를 위한 백준 문제 추천 모음


문제

백준 2979번 - 트럭 주차

BOJ

문제 정의

총 3대의 트럭이 각각 주차장 이용 시작 시간과 끝 시간이 입력으로 주어지는데 이때 1대의 트럭을 주차할 때와 2대의 트럭을 주차할 때 3대의 트럭을 주차할 때의 주차장 이용요금이 다르다.
그렇기 때문에 1대의 트럭을 주차했을 때의 요금과 2대의 트럭을 주차했을 때의 요금과 3대의 트럭을 모두 주차 했을때의 요금을 각각 따로 계산하여 합산하여 출력하면 된다.

접근 방법

이 문제의 입력값의 크기는 최대 100이고 시간제한은 1초이다. 이 문제는 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행해야 하는 시뮬레이션 즉 구현 문제이다.

주로 삼성 코딩 테스트에서 자주 출제되는 구현 알고리즘은 프로그래밍 언어의 문법을 정확히 알고 있고 라이브러리 사용 경험을 늘리고 많은 문제를 풀어봐야 한다. 이 문제의 경우 입력값이 크지 않아 리스트를 사용해도 되었지만 많은 라이브러리를 사용해 보기 위해 DefaultDict를 사용해서 풀어 보았다.

문제 해설

단순하게 입력받은 모든 트럭의 각각 주차장 이용 시간을 DefaultDict의 Key로 하고 Value를 1씩 증가시켰다. 이렇게 하면 상근이가 주차장을 이용한 시간 모두가 Key로 들어가고 Value는 해당 Key 시간에 주차장을 이용하는 트럭의 개수가 된다.

이용 시간을 DefaultDict에 값을 다 넣었다면 Value가 1일 경우 1대의 트럭을 주차했을 때의 요금을 더하고 Value가 2일 경우 2대의 트럭을 주차했을 때의 요금 x 2 만큼 더하고 Value가 3일 경우 3대의 트럭을 주차했을 때의 요금 x 3 만큼 더하면 총 주차장 이용요금이 된다.

풀이

import sys
from collections import defaultdict
input = sys.stdin.readline


def sol(parkinglot_price, parkinglot_time):
    counter = defaultdict(int)
    total_price = 0

    for x, y in parkinglot_time:
        for i in range(x, y):
            counter[i] += 1

    for value in counter.values():
        if value == 1:
            total_price += parkinglot_price[0]
        elif value == 2:
            total_price += parkinglot_price[1] * 2
        else:
            total_price += parkinglot_price[2] * 3

    return total_price


if __name__ == '__main__':
    parkinglot_price = list(map(int, input().split()))
    parkinglot_time = [list(map(int, input().split())) for _ in range(3)]

    print(sol(parkinglot_price, parkinglot_time))


정리

이번 문제는 매우 쉬운 편이였다. 풀이의 시간 복잡도는 O(N2)이고 시간제한이 1초와 최대 입력값이 100으로 여유로운 편이였기에 시간 복잡도는 생각하지 않고 문제를 풀었다.

⚡직접 문제를 풀어보고 작성한 글입니다.⚡
🙂틀린 부분이나 보완할 점이 있을 경우 언제든지 댓글 혹은 메일로 지적해 주시면 감사하겠습니다!🙂

Leave a comment