[๋ฌธ์ ๋งํฌ] ๐ https://www.acmicpc.net/problem/2002
ํ์ด
1๏ธโฃ ์ฐจ๋ ์ง์ ์์ ๊ธฐ๋ก
์ฐจ๋์ด ์ง์ ํ ๋์ ์์๋ฅผ ๋์ ๋๋ฆฌ๋ก ์ ์ฅํ์ฌ, ๊ฐ ์ฐจ๋์ ์ง์ ์์น๋ฅผ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๊ฒ ํ๋ค.
car_in_dict = dict(zip(car_in, range(1, len(car_in) + 1)))
2๏ธโฃ ์ฐจ๋ ์ง์ ์์ ์ธ๋ฑ์ค ๋ณํ
์ฐจ๋์ด ๋๊ฐ๋ ์์์ ๋ฐ๋ผ ๊ฐ ์ฐจ๋์ ์ง์ ์์ ์ธ๋ฑ์ค๋ฅผ ๋ฆฌ์คํธ๋ก ๋ณํํ๋ค. ์ด ๋ฆฌ์คํธ๋ ๋๊ฐ๋ ์์๋ฅผ ์ง์ ์์๋ก ๋งคํํ ํํ์ด๋ค.
for i in car_out:
calc.append(car_in_dict[i])
3๏ธโฃ ์ถ์ ์ฌ๋ถ ํ์ธ
calc ๋ฆฌ์คํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ํ์ธํ์ฌ, ์์ ์ฐจ๋์ ์ง์ ์์๊ฐ ๋ค ์ฐจ๋๋ณด๋ค ํฌ๋ค๋ฉด ์ถ์์ด ๋ฐ์ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๊ณ ์ถ์ ํ์(result)๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
for i in range(len(calc) - 1):
for j in range(i + 1, len(calc)):
if calc[i] > calc[j]: # ๋ค์ ์์ด์ผ ํ ์ฐจ๋์ด ์์ ๋์ค๋ฉด ์ถ์ ๋ฐ์
result += 1
break
4๏ธโฃ ๊ฒฐ๊ณผ ์ถ๋ ฅ
์ต์ข ์ถ์ ํ์๋ฅผ ์ถ๋ ฅํ๋ค.
Solution
n = int(input()) #์ฐจ๋ ์
car_in = [input().strip() for _ in range(n)] # ๋ค์ด๊ฐ๋ ์์
car_out = [input().strip() for _ in range(n)] # ๋๊ฐ๋ ์์
result = 0
car_in_dict = dict(zip(car_in, range(1, len(car_in) + 1))) # ๋์
๋๋ฆฌ ์์ฑ
calc = []
for i in car_out:
calc.append(car_in_dict[i]) # ๋๊ฐ๋ ์ฐจ๋ ์ธ๋ฑ์ค ์ ์ฅ
# ์ถ๊ตฌ ์์์์ ์ถ์ ์ฌ๋ถ ํ์ธ
for i in range(len(calc) - 1):
for j in range(i + 1, len(calc)):
if calc[i] > calc[j]: # ๋ค์ ์์ด์ผ ํ ์ฐจ๋์ด ์์ ๋์ค๋ฉด ์ถ์ ๋ฐ์
result += 1
break
# ์ต์ข
์ถ์ ํ์ ์ถ๋ ฅ
print(result)
set๋ฅผ ์ฌ์ฉํ ํ์ด
n = int(input())
car_in = [input().strip() for _ in range(n)] # ๋ค์ด๊ฐ๋ ์์
car_out = [input().strip() for _ in range(n)] # ๋๊ฐ๋ ์์
# ๊ฐ ์ฐจ๋์ด ๋ค์ด์จ ์์๋ฅผ ์ ์ฅ
car_in_dict = {car: idx for idx, car in enumerate(car_in)}
# ์ฐจ๋ ์ถ๊ตฌ์์ ์ถ์์ ํ์ธ
result = 0
passed_cars = set() # ์ด๋ฏธ ๋๊ฐ ์ฐจ๋์ ๊ธฐ๋ก
for car in car_out:
car_in_index = car_in_dict[car]
# ์ด๋ฏธ ๋๊ฐ ์ฐจ๋์ ์ธ๋ฑ์ค๊ฐ ํ์ฌ ์ฐจ๋๋ณด๋ค ํฌ๋ฉด ์ถ์ ๋ฐ์
if any(car_in_dict[other] < car_in_index for other in passed_cars):
result += 1
# ๋๊ฐ ์ฐจ๋ ๊ธฐ๋ก
passed_cars.add(car)
print(result)
- enumerate
- enumerate๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(๋ฆฌ์คํธ, ํํ ๋ฑ)์ ๊ฐ ์์์ ๊ทธ์ ํด๋นํ๋ ์ธ๋ฑ์ค๋ฅผ ๋์์ ๋ฐํํ๋ค.
- ์๋ฅผ ๋ค์ด, car_in_dict = {car: idx for idx, car in enumerate(car_in)} ๊ตฌ๋ฌธ์ car_in ๋ฆฌ์คํธ์ ๊ฐ ์ฐจ๋ ์ด๋ฆ์ ํค๋ก, ํด๋น ์ฐจ๋์ด ๋ฆฌ์คํธ์์ ๋ฑ์ฅํ ์ธ๋ฑ์ค idx๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋ ๋์ ๋๋ฆฌ car_in_dict๋ฅผ ๋ง๋ ๋ค.
- ์ด ๊ฒฝ์ฐ car_in_dict์๋ ์ฐจ๋์ ์ด๋ฆ๊ณผ ํด๋น ์ฐจ๋์ด ๋ค์ด์จ ์์๊ฐ ๋งคํ๋๋ค.
- set
- set์ ์ค๋ณต ์๋ ์์ ์๋ ๋ฐ์ดํฐ์ ๋ชจ์์ผ๋ก, ํจ์จ์ ์ผ๋ก ์์์ ์ถ๊ฐ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- passed_cars = set()์ ์ด๋ฏธ ๋๊ฐ ์ฐจ๋๋ค์ ์ ์ฅํ๋ ์งํฉ.
- passed_cars.add(car) ๊ตฌ๋ฌธ์ ํตํด ์ฐจ๋์ด ๋๊ฐ๋ฉด์ ๊ทธ ์ฐจ๋์ด passed_cars์ ์ถ๊ฐ.
- ์ด๋ ๊ฒ set์ ์ฌ์ฉํ๋ฉด ํน์ ์ฐจ๋์ด ์ด๋ฏธ ๋๊ฐ๋์ง ์ฌ๋ถ๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋ค.
- any
- any๋ ์ฃผ์ด์ง ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด์ ์์ ์ค ํ๋๋ผ๋ True์ผ ๊ฒฝ์ฐ True๋ฅผ ๋ฐํ, ๋ชจ๋ False๋ฉด False๋ฅผ ๋ฐํํ๋ค.
- ์ด ์ฝ๋์ if any(car_in_dict[other] < car_in_index for other in passed_cars) ๋ถ๋ถ์ passed_cars์ ์๋ ์ฐจ๋ ์ค ์ง์ ์์๊ฐ ํ์ฌ ์ฐจ๋๋ณด๋ค ๋จผ์ ์ธ ๊ฒ์ด ํ๋๋ผ๋ ์๋์ง ํ์ธํ๋ค. ์ด๋ ํ์ฌ ์ฐจ๋๋ณด๋ค ๋จผ์ ๋๊ฐ์ผ ํ ์ฐจ๋์ด ์ด๋ฏธ ๋๊ฐ๋์ง ํ์ธํ๊ธฐ ์ํ ๊ฒ์ด๋ค.
- ๋ง์ฝ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฐจ๋์ด ์์ผ๋ฉด ์ถ์์ด ๋ฐ์ํ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ์ฌ result๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
๐ฉ๐ป ํ๊ณ
์ถ์ ๋ฌธ์ .. ๋๋ฌด ์ด๋ ค์ ๋ค. ๋์ ๋๋ฆฌ ์์ฑ ํ ๋๊ฐ๋ ์ฐจ๋๋ค์ ๋งคํ๊น์ง ํ์ง๋ง ๊ทธ ์ดํ๊ฐ ๋ฌธ์ ์๋ค. ๋ค ์ธ๋ฑ์ค๋ถํฐ for ๋ฌธ์ ๋๋ ค ๋ค ์ธ๋ฑ์ค ๊ฐ๋ณด๋ค ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ด ๋ ํฌ๋ฉด ๋ค ์ธ๋ฑ์ค ๊ฐ์ ๋ฐ๋ก ์ ์ฅํ์ฌ ํ์ฌ ์์น์ ๊ณ์ ๋น๊ตํ๋ ค ํ๋๋ฐ ์ด ๊ณผ์ ์ด ์ ๋์ง ์์๋ค. ๋จธ๋ฆฌ๊ฐ ๊ตณ์ด๋ฒ๋ฆฐ ๋๋์ด์๋ค. ํ..
'๐งฉ Algorithm > [BOJ] Silver' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [BOJ] 5635. ์์ผ (Python/๊ตฌํ/Silver 5) (0) | 2024.11.06 |
|---|---|
| [BOJ] 2563. ์์ข ์ด (Python/๊ตฌํ/Silver 5) (0) | 2024.11.04 |
| [BOJ] 1021. ํ์ ํ๋ ํ (Python/์๋ฃ๊ตฌ์กฐ/Silver 3) (1) | 2024.10.29 |
| [BOJ] 2161. ์นด๋1 (Python/์๋ฃ๊ตฌ์กฐ/Silver 5) (0) | 2024.10.29 |
| BOJ 11723๋ฒ : ์งํฉ (Python/๊ตฌํ/Silver 5) (0) | 2024.03.12 |