코딩테스트/PYTHON

[백준][PYTHON] 2979번 트럭 주차

_알파카 2024. 6. 5. 16:28
728x90

문제

https://www.acmicpc.net/problem/2979

 

문제 접근

예제 1을 기준으로 문제를 확인해보자. 

1대 주차 -> 한대 당 5원

2대 주차 -> 한대 당 3원

3대 주차 -> 한대 당 1원

 

트럭이 주차장에 있는 시간들을 모두 계산해보면, 아래 이미지와 같다. 

 

이렇게 3대의 주차 시간을 모두 고려하면, 위와 같이 주차장에 현재 몇 대가 있는지 알 수 있다. 

 

이 과정을 어떻게할지 고민하다가, 최대 시간이 길지 않아(100) 그냥 배열로 만들어, 주차장에 몇 대가 있는지 판단하기로 하였다. 

1. res 배열을 100개의 0배열로 만든다. 이 배열은 각 분 당 주차장에 차가 몇 대 있는지 나타내는 배열이다. 

res = [0] * 100

 

2. 주차장에 있는 시간을 순회하며, 차가 주차장에 있는 시간일 때는 res 배열의 시간에 해당하는 자리에 1을 더해준다. 

for i, j in times:
    for r in range(i, j):
        res[r] += 1

 

3. 트럭은 최대 3대가 있으므로, res 배열에서 1이 몇 번 나왔는지, 2가 몇 번 나왔는지 등을 찾고, 

차량 대수에 해당하는 가격과 몇 대가 주차되어 있는지를 곱해준다. 

for p in range(len(price)):
    answer += (res.count(p+1) * price[p] * (p+1))

 

 

<주의할 점>

  • 주어진 시간 중 첫 번째 요소는 주차장에 있는 시간, 두 번째 요소는 이미 주차장에서 떠나고 없는 시간이다. 
  • 주차 가격을 더할 때, 주어진 주차 가격이 한 대당 가격임을 기억하자!
    (이걸 까먹어서 시간이 오래걸렸다ㅠ)

 

풀이

# 주차요금 A, B, C
price = list(map(int, input().split()))

times = []
# 트럭이 주차장에 도착한 시간과 떠난 시간
for _ in range(len(price)):
    times.append(list(map(int, input().split())))
    
# 각 분 당 주차장에 차가 몇 대 있는지 나타낼 배열 res (최대 100)
res = [0] * 100

# 주차장에 있는 시간을 순회하며, 차가 주차장에 있으면 1을 더해준다. 
for i, j in times:
    for r in range(i, j):
        res[r] += 1      

answer = 0
# 차는 최대 3대가 있으므로, n대 주차되었을 때가 몇 번 있는지. 몇 대 있는지 계산하여 더한다. 
for p in range(len(price)):
    answer += (res.count(p+1) * price[p] * (p+1))
    
print(answer)

 

 

 

728x90