문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
t = int(input())
for test_case in range(1,t+1):
n, m = map(int, input().split()) #n:주차공간개수 m:차량의무게
park = []
for _ in range(n):
park.append(int(input()))
weight = [0]
for _ in range(m):
weight.append(int(input()))
inout = []
for _ in range(2*m):
inout.append(int(input()))
wait = [] #주차공간에 차가 가득 찼을 때 대기열 리스트
v = [0] * n #주차공간에 차가 들어온 것을 표시하기 위한 리스트
ans = 0
for i in inout: #출입정보를 하나씩 살펴본다.
if i > 0: #양수가 왔을 때,(i는 차량 무게 리스트의 인덱스가 된다)
if v.count(0) == 0: #주차 공간이 가득 찼다면,
wait.append(i) #대기열에 추가
else: #주차공간이 가득 차지 않았다면,
for j in range(len(v)):
if v[j] == 0: #빈 공간을 찾는다.
v[j] = i #인덱스를 표시한다.
break
elif i < 0: #음수가 왔을 때,
i = abs(i)
for j in range(len(v)):
if v[j] == i: #해당 차량이 나가야 한다.
ans += park[j]*weight[i] #요금을 계산한다.
if wait: #만약 대기열이 있다면
v[j] = wait.pop(0) #새로운 차량이 들어온다.
else: #대기열이 없다면
v[j] = 0 #주차공간이 비었다고 표시한다.
break
print("#{} {}".format(test_case, ans))
피드백
의외로 잘 풀리지 않았던 문제이다. 처음에는 출입 정보 리스트를 따로 두지 않고, 출입 정보를 하나씩 입력받으면서 요금을 더해주는 방식으로 문제를 풀었었는데, 예제 출력값은 정상적으로 나왔으나 틀렸다는 판정을 받았다. 한 시간 넘게 헤매다가 결국 구글링을 통해 다른 코드를 확인했는데, 출입 정보를 리스트에 담고, 리스트에서 하나씩 꺼내면서 요금을 구하는 방식으로 문제를 풀었더니 정답 판정을 받을 수 있었다. 문제에서 시키는 대로만 구현하면 정답 판정을 받을 수 있는 문제인데, 문제에서 시키는 대로 구현하기가 쉽지 않았던 문제. 이러한 시뮬레이션 문제에 대해 연습이 필요하다는 것을 느꼈고, 남은 기간동안 다른 시뮬레이션 문제도 많이 풀어봐야겠다.
'SWEA (SW Expert Academy) > D3' 카테고리의 다른 글
[SWEA/D3] 1493 수의 새로운 연산 (0) | 2023.05.17 |
---|---|
[SWEA/D3] 1873 상호의 배틀필드 (0) | 2023.05.16 |
[SWEA/D3] 13038 교환학생 (0) | 2023.05.16 |
[다시풀기] [SWEA/D3] 15612 체스판 위의 룩 위치 (0) | 2023.05.16 |
[SWEA/D3] 1208 [S/W 문제해결 기본] 1일차 - Flatten (0) | 2023.05.16 |