ํผ์์๋ ์ ๋ ธ๋ ๋ฒํฌ๋ ์ด๋ ๋ ๋ฐฉ๊ตฌ์์ ์๋ ์ซ์ ์นด๋ ๋๋ฏธ๋ฅผ ๋ณด๋๋ ํผ์ ํ ์ ์๋ ์ฌ๋ฏธ์๋ ๊ฒ์์ ์๊ฐํด๋์ต๋๋ค.
์ซ์ ์นด๋ ๋๋ฏธ์๋ ์นด๋๊ฐ ์ด 100์ฅ ์์ผ๋ฉฐ, ๊ฐ ์นด๋์๋ 1๋ถํฐ 100๊น์ง ์ซ์๊ฐ ํ๋์ฉ ์ ํ์์ต๋๋ค. 2 ์ด์ 100 ์ดํ์ ์์ฐ์๋ฅผ ํ๋ ์ ํด ๊ทธ ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ซ์ ์นด๋๋ค์ ์ค๋นํ๊ณ , ์ค๋นํ ์นด๋์ ์๋งํผ ์์ ์์๋ฅผ ์ค๋นํ๋ฉด ๊ฒ์์ ์์ํ ์ ์์ผ๋ฉฐ ๊ฒ์ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ค๋น๋ ์์์ ์นด๋๋ฅผ ํ ์ฅ์ฉ ๋ฃ๊ณ , ์์๋ฅผ ๋ฌด์์๋ก ์์ด ์ผ๋ ฌ๋ก ๋์ดํฉ๋๋ค. ์์๊ฐ ์ผ๋ ฌ๋ก ๋์ด๋๋ฉด ์์๊ฐ ๋์ด๋ ์์์ ๋ฐ๋ผ 1๋ฒ๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐํ๋ ๋ฒํธ๋ฅผ ๋ถ์ ๋๋ค.
๊ทธ ๋ค์ ์์์ ์์๋ฅผ ํ๋ ์ ํํ์ฌ ์ ํํ ์์ ์์ ์ซ์ ์นด๋๋ฅผ ํ์ธํฉ๋๋ค. ๋ค์์ผ๋ก ํ์ธํ ์นด๋์ ์ ํ ๋ฒํธ์ ํด๋นํ๋ ์์๋ฅผ ์ด์ด ์์ ๋ด๊ธด ์นด๋์ ์ ํ ์ซ์๋ฅผ ํ์ธํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ซ์์ ํด๋นํ๋ ๋ฒํธ๋ฅผ ๊ฐ์ง ์์๋ฅผ ๊ณ์ํด์ ์ด์ด๊ฐ๋ฉฐ, ์ด์ด์ผ ํ๋ ์์๊ฐ ์ด๋ฏธ ์ด๋ ค์์ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
์ด๋ ๊ฒ ์ฐ ์์๋ค์ 1๋ฒ ์์ ๊ทธ๋ฃน์ ๋๋ค. ์ด์ 1๋ฒ ์์ ๊ทธ๋ฃน์ ๋ค๋ฅธ ์์๋ค๊ณผ ์์ด์ง ์๋๋ก ๋ฐ๋ก ๋ก๋๋ค. ๋ง์ฝ 1๋ฒ ์์ ๊ทธ๋ฃน์ ์ ์ธํ๊ณ ๋จ๋ ์์๊ฐ ์์ผ๋ฉด ๊ทธ๋๋ก ๊ฒ์์ด ์ข ๋ฃ๋๋ฉฐ, ์ด๋ ํ๋ํ๋ ์ ์๋ 0์ ์ ๋๋ค.
๊ทธ๋ ์ง ์๋ค๋ฉด ๋จ์ ์์ ์ค ๋ค์ ์์์ ์์ ํ๋๋ฅผ ๊ณจ๋ผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ด๋ฏธ ์ด๋ ค์๋ ์์๋ฅผ ๋ง๋ ๋๊น์ง ์์๋ฅผ ์ฝ๋๋ค. ์ด๋ ๊ฒ ์ฐ ์์๋ค์ 2๋ฒ ์์ ๊ทธ๋ฃน์ ๋๋ค.
1๋ฒ ์์ ๊ทธ๋ฃน์ ์ํ ์์์ ์์ 2๋ฒ ์์ ๊ทธ๋ฃน์ ์ํ ์์์ ์๋ฅผ ๊ณฑํ ๊ฐ์ด ๊ฒ์์ ์ ์์ ๋๋ค.
์์ ์์ ๋ค์ด์๋ ์นด๋ ๋ฒํธ๊ฐ ์์๋๋ก ๋ด๊ธด ๋ฐฐ์ด cards
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฒํฌ๊ฐ ์ด ๊ฒ์์์ ์ป์ ์ ์๋ ์ต๊ณ ์ ์๋ฅผ ๊ตฌํด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
2
โค cards
์ ๊ธธ์ด โค 100
cards
์ ์์๋ cards
์ ๊ธธ์ด ์ดํ์ธ ์์์ ์์ฐ์์
๋๋ค.cards
์๋ ์ค๋ณต๋๋ ์์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค.cards[i]
๋ i + 1๋ฒ ์์์ ๋ด๊ธด ์นด๋์ ์ ํ ์ซ์๋ฅผ ์๋ฏธํฉ๋๋ค.cards | result |
---|---|
[8,6,3,7,2,5,1,4] | 12 |
1, 4, 7, 8์ด ์ํ๋ ์์์ ๊ทธ๋ฃน๊ณผ 2, 5, 6์ด ์ํ๋ ์์์ ๊ทธ๋ฃน๊ณผ 3์ด ์ํ๋ ์์์ ๊ทธ๋ฃน์ด ์กด์ฌํฉ๋๋ค. ๋ฐ๋ผ์ 3๋ฒ ์์๋ฅผ ๊ณ ๋ฅด์ง ์์์ ๋, ๋ ๋ฒ์ ์ํ์์ 3๊ณผ 4๋ฅผ ๊ธฐ๋กํ๋ฉฐ ์ต๊ณ ์ ์ 12๋ฅผ ์ป์ ์ ์์ต๋๋ค.
def solution(cards):
answer = 0
visited = [False for _ in range(len(cards))] # ๊ฐ ์์๊ฐ ์ด๋ ธ๋์ง ์ฌ๋ถ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐฐ์ด
lst = [] # ๊ฐ ๊ทธ๋ฃน์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
for i in range(len(cards)): # ๋ชจ๋ ์์๋ฅผ ์ํํ๋ฉฐ ๊ทธ๋ฃน์ ํ์ฑ
if visited[i]: # ์ด๋ฏธ ์ด๋ ธ๋ค๋ฉด ๊ฑด๋๋
continue
visited[i] = True # ํ์ฌ ์์๋ฅผ ์ด์๋ค๊ณ ํ์
cur, linked = i, 1 # ํ์ฌ ์์์ ์ธ๋ฑ์ค์ ๊ทธ๋ฃน ํฌ๊ธฐ๋ฅผ ์ด๊ธฐํ
while cards[cur] - 1 != i: # ๋ค์ ์์๋ก ์ด๋ํ๋ฉฐ ๊ทธ๋ฃน ํ์ฑ
cur = cards[cur] - 1 # ์นด๋์ ์ ํ ์ซ์๋ฅผ ์ธ๋ฑ์ค๋ก ์ฌ์ฉํ์ฌ ์ด๋
visited[cur] = True # ํด๋น ์์๋ฅผ ์ด์๋ค๊ณ ํ์
linked += 1 # ๊ทธ๋ฃน ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํด
lst.append(linked) # ๊ทธ๋ฃน ํฌ๊ธฐ๋ฅผ ๋ฆฌ์คํธ์ ์ถ๊ฐ
if len(lst) < 2: # ๊ทธ๋ฃน์ด 2๊ฐ ๋ฏธ๋ง์ด๋ฉด ์ ์๋ 0
answer = 0
else:
lst.sort(reverse=True) # ๊ทธ๋ฃน ํฌ๊ธฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
answer = lst[0] * lst[1] # ๊ฐ์ฅ ํฐ ๋ ๊ทธ๋ฃน์ ํฌ๊ธฐ๋ฅผ ๊ณฑํจ
return answer # ์ต์ข
์ ์๋ฅผ ๋ฐํ