티스토리 뷰
코딩 테스트/SW Expert Academy
[SWEA: SW Expert Academy] 9280. 진용이네 주차타워 파이썬 정답 코드
leego 2023. 5. 20. 01:35
1. 접근 방식
- 주차장에 빈 공간이 있으면, 가장 번호가 공간에 주차시킨다.
즉, 현재 주차 공간의 현황을 알려주는 리스트가 필요하다고 판단하였다. 비어 있으면 0, 주차되어 있다면 0이 아닌 다른 값이 저장된 리스트. 리스트의 index(x) 메서드는 리스트 내에 x 값을 원소가 여러 개라도 첫 번째로 발견된 x의 인덱스를 반환하기 때문에 가장 작은 번호 공간에 주차시키는 건 어렵지 않게 처리할 수 있다.
- 주차 공간이 없다면 대기한다.
이를 위한 waiting 리스트가 필요하다. FIFO 방식이므로, 빈 공간이 발생하면 pop(0)을 하여 가장 첫 번째 원소를 꺼내 주차시키도록 코드를 작성하였다.
2. 정답 코드
T = int(input())
for test_case in range(1, T + 1):
n, m = map(int, input().split())
r = [ int(input()) for _ in range(n) ]
w = [ int(input()) for _ in range(m) ]
data = [ int(input()) for _ in range(m*2) ]
parked = [0] * n # 0 means empty
waiting = []
result = 0
for i in data:
if i < 0:
index = parked.index(abs(i))
if waiting:
j = waiting.pop(0)
parked[index] = j
result += r[index] * w[j-1]
else:
parked[index] = 0
else:
if 0 not in parked:
waiting.append(i)
else:
index = parked.index(0)
parked[index] = i
result += r[index] * w[i-1]
print(f'#{test_case} {result}')
처음에 문제를 이해하는 데 시간이 오래 걸렸지만, 재밌는 문제였다. 파이썬이 not in 연산을 지원한 덕분에 수월하게 문제의 로직을 구현할 수 있었다.
728x90
'코딩 테스트 > SW Expert Academy' 카테고리의 다른 글
[SW Expert Academy] 4047. 영준이의 카드 카운팅 파이썬 정답 코드 (0) | 2023.05.17 |
---|---|
[SW Expert Academy] 3131. 100만 이하의 모든 소수 파이썬 정답 코드 (0) | 2023.05.16 |
[SW Expert Academy] 4299. 태혁이의 사랑은 타이밍 파이썬 정답 코드 (0) | 2023.05.16 |
[SW Expert Academy] 1221. [S/W 문제해결 기본] 5일차 - GNS 파이썬 정답 코드 (0) | 2023.05.14 |
[SW Expert Academy] 6692. 다솔이의 월급 상자 파이썬 정답 코드 (0) | 2023.05.14 |