๐Ÿงฉ Algorithm/[BOJ] Silver

[BOJ] 2002. ์ถ”์›” (Python/๊ตฌํ˜„/Silver 2)

devCloud 2024. 10. 29. 16:26
728x90

 


[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‰ 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 ๋ฌธ์„ ๋Œ๋ ค ๋’ค ์ธ๋ฑ์Šค ๊ฐ’๋ณด๋‹ค ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฐ’์ด ๋” ํฌ๋ฉด ๋’ค ์ธ๋ฑ์Šค ๊ฐ’์„ ๋”ฐ๋กœ ์ €์žฅํ•˜์—ฌ ํ˜„์žฌ ์œ„์น˜์™€ ๊ณ„์† ๋น„๊ตํ•˜๋ ค ํ–ˆ๋Š”๋ฐ ์ด ๊ณผ์ •์ด ์ž˜ ๋˜์ง€ ์•Š์•˜๋‹ค. ๋จธ๋ฆฌ๊ฐ€ ๊ตณ์–ด๋ฒ„๋ฆฐ ๋А๋‚Œ์ด์—ˆ๋‹ค. ํ›„..


 

728x90