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
'코딩테스트 > PYTHON' 카테고리의 다른 글
[백준][PYTHON] 11723번 집합 (1) | 2024.07.24 |
---|---|
[백준][PYTHON] 1157번 단어 공부 (0) | 2024.06.06 |
[백준][PYTHON] 13305번 주유소 (0) | 2024.06.05 |
[백준][PYTHON] 1541번 잃어버린 괄호 (0) | 2024.05.30 |
[백준][PYTHON] 11399번 ATM (0) | 2024.05.30 |