SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
📌 작성한 코드
T = int(input())
for tc in range(1,1+T):
n, m = map(int,input().split())
fee = []
for _ in range(n):
fee.append(int(input()))
weight = []
for _ in range(m):
weight.append(int(input()))
order = []
for _ in range(2*m):
order.append(int(input()))
parking_lot = [0] * n
stay = []
answer = 0
for car in order:
if car < 0:
i = parking_lot.index(-1*car)
parking_lot[i] = 0
if len(stay) > 0:
parking_lot[i] = stay[0]
answer += fee[i] * weight[stay[0]-1]
stay = stay[1:]
else:
if 0 in parking_lot:
i = parking_lot.index(0)
parking_lot[i] = car
answer += fee[i] * weight[car-1]
else:
stay.append(car)
print(f'#{tc} {answer}')
📌 풀이
1. 입력받기
각 주차 공간의 단위 요금과(fee) 각 자동차의 무게(weight), 자동차가 들어오고 나오는 순서(order)를 입력받는다.
n, m = map(int,input().split())
fee = []
for _ in range(n):
fee.append(int(input()))
weight = []
for _ in range(m):
weight.append(int(input()))
order = []
for _ in range(2*m):
order.append(int(input()))
2. 주차공간, 대기열, 비용을 저장할 변수 생성하기
parking_lot = [0] * n
stay = []
answer = 0
3. 자동차가 들어온 순서대로 반복을 돌며 자동차를 넣었다 꺼냈다 반복하기
1. 자동차가 주차장에 들어올때(차의 숫자가 양수일때)
- 자동차가 들어갈 주차공간이 있으면(parking_lot에 0이 있으면) -> 해당 빈 공간 중 첫번째 위치 찾기(index 이용)
-> 해당 위치에 자동차 넣어주기(parking_lot에 해당 차 번호 넣기)
-> 단위 요금 * 자동차 무게 해서 정답에 더해주기 (car-1 한 이유는 car번호는 1부터 시작하고, 배열은 0부터 시작해서)
- 자동차가 들어갈 주차공간이 없으면 -> stay 대기열에 저장하기
2. 자동차가 주차장에서 나갈때(차의 숫자가 음수일때)
- 자동차가 주차된 위치 찾기(index 사용, 해당 숫자의 양수버전이 저장되어 있으니까 -1곱해서 찾기)
-> 해당 주차장을 비워준다
- 만약 자리가 없어서 대기하고 있는 자동차가 있다면 맨 앞 자동차를 방금 생긴 빈자리에 넣어준다.
- 기다리는 순서대로 들어가야 하니까 stay[0]부터 넣어주기
- 어차피 공간이 없을때 차가 나가기 전에는 들어갈 수 없으니까, 차가 나갈때 기다리는 차를 넣어주는 방식으로 해서 차가 들어가는 순서가 헷갈리지 않게 하기 위해서 이렇게 작성하였다
for car in order:
if car < 0:
i = parking_lot.index(-1*car)
parking_lot[i] = 0
if len(stay) > 0:
parking_lot[i] = stay[0]
answer += fee[i] * weight[stay[0]-1]
stay = stay[1:]
else:
if 0 in parking_lot:
i = parking_lot.index(0)
parking_lot[i] = car
answer += fee[i] * weight[car-1]
else:
stay.append(car)

'알고리즘 > SWEA' 카테고리의 다른 글
| [Python] SWEA D3 : 1230 - [S/W 문제해결 기본] 8일차 - 암호문3 (0) | 2023.11.17 |
|---|---|
| [Python] SWEA D3 : 3131 - 100만 이하의 모든 소수 (0) | 2023.11.17 |
| [Python] SWEA D3 : 1873 - 상호의 배틀필드 (0) | 2023.11.17 |
| [Python] SWEA D3 : 1225 - [S/W 문제해결 기본] 7일차 - 암호생성기 (0) | 2023.11.16 |
| [Python] SWEA D3 : 5789 - 현주의 상자 바꾸기 (0) | 2023.11.16 |