[๋ฌธ์ ๋งํฌ] ๐
SW Expert Academy
SW ํ๋ก๊ทธ๋๋ฐ ์ญ๋ ๊ฐํ์ ๋์์ด ๋๋ ๋ค์ํ ํ์ต ์ปจํ ์ธ ๋ฅผ ํ์ธํ์ธ์!
swexpertacademy.com
ํ์ด ๋ฐฉ๋ฒ
์ฃผ์ฐจ์ฅ๊ณผ ๋๊ธฐ์ด ์ค์
- ์ฃผ์ฐจ์ฅ ๋ฆฌ์คํธ, ๋๊ธฐ์ด ๋ฆฌ์คํธ, ์ฃผ์ฐจ ์๊ธ์ ์ ์ฅํ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ค.
์ฐจ๋ ์ ์ถ์ฐจ ์ฒ๋ฆฌ
- ์ฐจ๋์ด ์
์ฐจํ ๋(car > 0)
- ์ฃผ์ฐจ์ฅ์ ์ฌ์ ๊ฐ ์๋ ๊ฒฝ์ฐ(0 in parking) ๋น์ด์๋ ์ฒซ ๋ฒ์งธ ์ฃผ์ฐจ ๊ณต๊ฐ์ ์ฐจ๋์ ์ ์ฅํ๊ณ ์๊ธ์ ๊ณ์ฐํ๋ค.
- ์ฃผ์ฐจ์ฅ์ด ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ(0 not in parking) ํด๋น ์ฐจ๋์ ๋๊ธฐ์ด ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ค.
- ์ฐจ๋์ด ์ถ์ฐจํ ๋(car < 0)
- ์ฃผ์ฐจ์ฅ ๋ฆฌ์คํธ์์ ๋๊ฐ๋ ์ฐจ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ํด๋น ๊ณต๊ฐ์ ๋น์ด๋ค. (index() ์ฌ์ฉ)
- ํด๋น ๊ณต๊ฐ์ 0์ผ๋ก ๋ง๋ ๋ค.
- ๋๊ธฐ ์ค์ธ ์ฐจ๋์ด ์๋ ๊ฒฝ์ฐ, ๋๊ธฐ ์ฐจ๋ ์ค ๊ฐ์ฅ ๋จผ์ ๋๊ธฐํ ์ฐจ๋ ์ฆ, ๋๊ธฐ์ด ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ฅผ ๊บผ๋ธ๋ค.
- ์ถ์ฐจํ ์ฐจ๋์ด ์๋ ์ฃผ์ฐจ ๊ณต๊ฐ์ ์ฐจ๋์ ์ ์ฅํ๊ณ , ์๊ธ์ ๊ณ์ฐํ๋ค.
- ์ฃผ์ฐจ์ฅ ๋ฆฌ์คํธ์์ ๋๊ฐ๋ ์ฐจ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ํด๋น ๊ณต๊ฐ์ ๋น์ด๋ค. (index() ์ฌ์ฉ)
๊ฒฐ๊ณผ ์ถ๋ ฅ
- ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ๋์ ๋ ์๊ธ์ ์ถ๋ ฅํ๋ค.
Solution
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)] # ์ฐจ๋ ๋ฌด๊ฒ
parking = [0]*N # ์ฃผ์ฐจ์ฅ
waiting = [] # ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ฐจ๋
result = 0 # ์ฃผ์ฐจ ์๊ธ
for _ in range(M * 2):
car = int(input()) # ์ฐจ๋ ์ถ์
์์
if car > 0: # ๋ค์ด์ค๋ ์ฐจ๋์ผ ๋
if 0 not in parking: # ์ฃผ์ฐจ ๊ณต๊ฐ์ด ์์ผ๋ฉด ๋๊ธฐ์ํค๊ธฐ
waiting.append(car)
else:
for i in range(N): # ์ฃผ์ฐจ ๊ณต๊ฐ ํ์
if parking[i] == 0: # ์ฃผ์ฐจ ๊ณต๊ฐ์ด ๋น์ด์์ผ๋ฉด
parking[i] = car # ์ฃผ์ฐจ ์ํค๊ธฐ
result += R[i] * W[car - 1] # ์๊ธ ๊ณ์ฐ
break
else: # ๋๊ฐ๋ ์ฐจ๋์ผ ๋
now_idx = parking.index(abs(car)) # ๋๊ฐ๋ ์ฐจ๋ ์ธ๋ฑ์ค
parking[now_idx] += car # ํด๋น ์ฐจ๋์ด ๋ค์ด์๋ ์ธ๋ฑ์ค ์ฐพ์์ 0์ผ๋ก ๋ง๋ค๊ธฐ
if len(waiting) != 0: # ๋๊ธฐํ๊ณ ์๋ ์ฐจ๋์ด ์์ ๋ ์ฃผ์ฐจ์ํค๊ธฐ
waiting_car = waiting.pop(0)
parking[now_idx] = waiting_car # ์ฃผ์ฐจ์ํค๊ธฐ
result += R[now_idx] * W[waiting_car - 1] # ์๊ธ ๊ณ์ฐ
print(f"#{test_case} {result}")
๊ฐ์ ํ ์
- ์ถ์ฐจ ์ฒ๋ฆฌ ๊ฐ์
- car๊ฐ ์ถ์ฐจ์ผ ๋, parking[now_idx] += car๋ก ๋ค์ ๋ํด 0์ ๋ง๋๋ ๋์ , parking[now_idx] = 0์ผ๋ก ๋ช ํํ ๋น์์ฃผ๋ ๊ฒ์ด ๊ฐ๋ ์ฑ์ด ์ข๋ค.
- ์ถ์
์์ ์
๋ ฅ ๊ด๋ฆฌ
- car์ ์ถ์ ์์ ์ ๋ ฅ์ ๋ฏธ๋ฆฌ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด ๋๊ณ ์์๋๋ก ์ฒ๋ฆฌํ๋ฉด ์ ์ถ๋ ฅ์ ์ค์ฌ ์ฝ๋์ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
- ๋ถํ์ํ ๋ฐ๋ณต ์ค์ด๊ธฐ
- 0 not in parking์ผ๋ก ๊ณต๊ฐ์ด ์์์ ํ์ธํ๊ณ waiting์ ์ถ๊ฐํ๋ ๊ฒ๋ณด๋ค, parking ๋ฆฌ์คํธ์ ๋น ๊ณต๊ฐ์ next_free_space์ ๊ฐ์ ๋ณ์๋ก ๊ด๋ฆฌํ๋ฉด ๋ฐ๋ณต๋ฌธ์ ์ค์ผ ์ ์๋ค.
๊ฐ์ ๋ ์ฝ๋
T = int(input()) # ํ
์คํธ ์ผ์ด์ค ์
for test_case in range(1, T + 1):
# ๋์ผ
for _ in range(M * 2):
car = int(input()) # ์ฐจ๋ ์ถ์
์์
if car > 0: # ๋ค์ด์ค๋ ์ฐจ๋์ผ ๋
parked = False
for i in range(N): # ์ฃผ์ฐจ ๊ณต๊ฐ ํ์
if parking[i] == 0: # ์ฃผ์ฐจ ๊ณต๊ฐ์ด ๋น์ด์์ผ๋ฉด
parking[i] = car # ์ฃผ์ฐจ ์ํค๊ธฐ
result += R[i] * W[car - 1] # ์๊ธ ๊ณ์ฐ
parked = True
break
if not parked: # ์ฃผ์ฐจ ๊ณต๊ฐ์ด ์์ผ๋ฉด ๋๊ธฐ์ํค๊ธฐ
waiting.append(car)
else: # ๋๊ฐ๋ ์ฐจ๋์ผ ๋
car = abs(car)
now_idx = parking.index(car) # ๋๊ฐ๋ ์ฐจ๋ ์ธ๋ฑ์ค
parking[now_idx] = 0 # ํด๋น ๊ณต๊ฐ ๋น์ฐ๊ธฐ
if waiting: # ๋๊ธฐ ์ฐจ๋์ด ์์ผ๋ฉด ์ฃผ์ฐจ์ํค๊ธฐ
waiting_car = waiting.pop(0)
parking[now_idx] = waiting_car
result += R[now_idx] * W[waiting_car - 1] # ์๊ธ ๊ณ์ฐ
print(f"#{test_case} {result}")
๐ฉ๐ป ํ๊ณ
์ด ๋ฌธ์ ๋ฅผ ํ ๋ ๋ต์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ค์ง ์์๋ ์ ์ด ์์๋ค. ๋ค์์ ์๋ฌ๊ฐ ๋ฌ์ ๋์ ์ฝ๋์ด๋ค.
1. ์ฐจ๋ ์ถ์ฐจ ์ํฌ ๋
parking[now_idx] -= car
- ์ถ์ฐจํ๋ ์ฐจ๋์ ์์์ธ๋ฐ -(๋ง์ด๋์ค) ๋ฅผ ํด๋ฒ๋ฆฌ๋ฉด +(ํ๋ฌ์ค) ๊ฐ ๋์ด์ 0์ด ๋์ง ์๊ณ ๊ฐ์ด ๋ํด์ง๋ค.
- ๋จ์ํ๊ฒ ์๊ฐํด์ ๋ง์ด๋์ค ํ ๊ฑฐ๋๊น ๊ทธ๋๋ก - ๋ฅผ ํ๋๋ ๊ฐ์ด ์ฆ๊ฐ ๋๋ค.
2. ์๊ธ ๊ณ์ฐ ์ ์ธ๋ฑ์ค
result += R[i] * W[car]
result += R[now_idx] * W[waiting_car]
- ๋ฆฌ์คํธ ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์ํ๋๋ฐ ์ฐจ๋์ ๊ทธ๋๋ก ์ธ๋ฑ์ค์ ์ง์ด๋ฃ์ด์ IndexError ๊ฐ ๋ด๋ค.
3. ์ฃผ์ฐจ ๊ณต๊ฐ์ด ์์ ๋
if 0 not in parking: # ์ฃผ์ฐจ ๊ณต๊ฐ์ด ์์ผ๋ฉด ๋๊ธฐ์ํค๊ธฐ
waiting.append(car)
- ์ด ์ฝ๋์๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ์์๊ฐ ์๋ชป ๋์๋ค.
- ์ฃผ์ฐจ ๊ณต๊ฐ์ ํ์ํ๋ ๋ฃจํ๋ฌธ ์๋์ ์ด ์ฝ๋๋ฅผ ๋ฃ์๋๋ ์ฐจ๋์ ์ฃผ์ฐจ์ํค๊ณ ๋ ํ์ ์ด ์กฐ๊ฑด์ ํ์ธํ๊ฒ ๋ผ์ ์ฃผ์ฐจ๋ฅผ ์์ผฐ์์๋ ํด๋น ์ฐจ๋์ด ๋๊ธฐ์ด๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.
์ด๋ฐ ๋ฌธ์ ๋ค ๋๋ฌธ์ ์ฐจ๋์ด ์ถ์ ํ๊ณ ์ถ์ฐจํ๋ ๊ณผ์ ์ ์ผ์ผ์ด ์ถ๋ ฅํด๋ณด๋ฉด์ ํ์ธํ๋ค. ๋๋ถ์ ๋ฌธ์ ๋ฅผ ๋ฐ๋ก ๋ฐ๊ฒฌํ๊ณ ์ ํด๊ฒฐํ๋ค. ์ง๋ฌธ ์ค๋ช ์ด ์์ฃผ ์ ๋ผ ์๊ณ ๋จ์ ๊ตฌํ์ด๋ผ ์ค๋ช ํ๋๋๋ก๋ง ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ด๋ ต์ง ์๊ฒ ํ ์ ์์๋งํ ๋ฌธ์ ์๋ค.
'๐งฉ Algorithm > SWEA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SWEA] 3975. ์น๋ฅ ๋น๊ตํ๊ธฐ (Python/D3) (2) | 2024.11.15 |
|---|---|
| [SWEA] 16800. ๊ตฌ๊ตฌ๋จ ๊ฑท๊ธฐ (Python/D3) (0) | 2024.11.14 |
| [SWEA] 4047. ์์ค์ด์ ์นด๋ ์นด์ดํ (Python/D3) (2) | 2024.11.14 |
| [SWEA] 3260. ๋ ์์ ๋ง์ (Python/D3) (1) | 2024.11.14 |
| [SWEA] 1873. ์ํธ์ ๋ฐฐํํ๋ (Python/D3) (2) | 2024.11.13 |