๋ฌธ์ ์ค๋ช
ํผ์์๋ ์ ๋ ธ๋ ๋ฒํฌ๋ ์ด๋ ๋ ๋ฐฉ๊ตฌ์์ ์๋ ์ซ์ ์นด๋ ๋๋ฏธ๋ฅผ ๋ณด๋๋ ํผ์ ํ ์ ์๋ ์ฌ๋ฏธ์๋ ๊ฒ์์ ์๊ฐํด๋์ต๋๋ค.
์ซ์ ์นด๋ ๋๋ฏธ์๋ ์นด๋๊ฐ ์ด 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๋ฅผ ์ป์ ์ ์์ต๋๋ค.
ํ์ด
- ์ญ๋๊ธ ์ค๋ช ์ด ์ด์ํ ๋ฌธ์ ์ค ํ๋... ใ ก.ใ ก?
- ์ค๋ช
๋๋ก ์ต์ ์ผ์ด์ค๋ก ํด๋ณด์.
- 2์นด๋๋ฅผ ๋ฝ์๋ค.
- ๊ทธ๋ผ ์นด๋๋ [1, 2], ์์๋ 2๊ฐ
- ์์ด๋ดค์ [1, 2], [2,1]
- ๋ฒํธ๋ 1, 2๋ถ์ด๋ฉด ๋๊ณ ...
- ๊ทธ ๋ค์ ์์์ ์์๋ฅผ ํ๋ ์ ํํ๋ฉด [1]์๋๋ฉด [2]
- ๊ทธ๋ฆฌ๊ณ [1]์ด๋ฉด [1]๋ฒ ์์๋ฅผ ๋ ์ด์ด์ผ ๋๋๋ฐ ๋ถ๊ฐ๋ฅ
- [2]๋ ๋ง์ฐฌ๊ฐ์ง. ๋.
- ๊ทธ๋ผ [1]๋ฒ ์ด์๋ ๊ทธ๋ฃน์ด 1๋ฒ ์์ ๊ทธ๋ฃน.
- [2]๋ 2๋ฒ ์์ ๊ทธ๋ฃน.
- ์ด๋ ๊ฒ ์์ด์ง ์๋๋ก ๋ฐ๋ก ๋๋ค.
- ๋จ์ ์์๊ฐ ์์ผ๋ฉด ๊ฒ์ ์ข ๋ฃ.
- ๊ทผ๋ฐ 1๋ฒ ์์ ๊ทธ๋ฃน๋ง ์์ผ๋ฉด ํ๋ ์ ์๋ 0์ .
- ๊ทธ๋์ 1๋ฒ ์์ ๊ทธ๋ฃน์ ์ํ ์์ ์์ 2๋ฒ ์์ ๊ทธ๋ฃน์ ์์ ์์์ ์๋ฅผ ๊ณฑํ ๊ฐ์ด ๊ฒ์์ ์ ์.
- ์ด๋ฐ ๊ฒ์์์ ์ป์ ์ ์๋ ์ต๊ณ ์ ์๋ฅผ ๊ตฌํ์์ค.
- ๊ทผ๋ฐ ์์ ์์ ๋ค์ด์๋ ์นด๋ ๋ฒํธ ์์๋๋ก ๋ด๊ธด ๋ฐฐ์ด์ด cards.
- ์นด๋ ๋ฒํธ ์์๋๋ก๊ฐ ์๋ฏธ๊ฐ ์๋? ๋ฌด์์๋ก ์์ด์ ๋์ดํ๋ผ๋ฉฐ?
- ์... ๋ฌด์์๋ก ์์ฌ์ ๋์ด๋ ์์๊ฐ cards์ธ๊ฐ?
- ๊ทผ๋ฐ ๊ทธ ๋ค์์ ๋ ์์ด์ ์์๋ฅผ ์ ํํ๋ผ๋ฉฐ?
- ๋ญ์ง?? (ใ
ก.ใ
ก) ๊ตฌ๋ฅ ๋ค์ ํด๋ณด์...
- ์
์ถ๋ ฅ ์์์ ๋งํ๋ [8,6,3,7,2,5,1,4]๊ฐ, ์์ ์์ ๋ค์ด์๋ ์นด๋์ ์์์ด๊ณ .
- [8],[6],[3],[7],[2],[5],[1],[4] ์ด๋ ๊ฒ 8๊ฐ์ ์์๊ฐ ์๊ณ ,
- ์ด์ค์ ํ๋๋ฅผ ๋ฌด์์๋ก ์ ํํ๋ฉด
- 8 -> 4 -> 7 -> 1 -> 8
- 6 -> 5 -> 2 -> 6 -> 5 ...
- 3 -> 3...
- 7 -> 1 -> 8 ...
- 2 -> 6 -> 5...
- 5 -> 2 -> 6...
- 1 -> 8...
- 4 -> 7...
- ์......... visted ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋๊ตฌ๋?
- ์์๋ค.
- ์
์ถ๋ ฅ ์์์ ๋งํ๋ [8,6,3,7,2,5,1,4]๊ฐ, ์์ ์์ ๋ค์ด์๋ ์นด๋์ ์์์ด๊ณ .
- ๋ฌด์ง์ฑ ์ฝ๋ฉ ๊ฐ์ฆ์!
import collections
def solution(cards):
len_cards = len(cards)
unvisited = [True] * len_cards
scores = collections.Counter()
for i in range(len_cards):
if unvisited[i] == True:
scores[i] = 0
pos = i
while True:
unvisited[pos] = False
pos = cards[pos] -1
scores[i] += 1
print(unvisited, scores, cards, pos)
if unvisited[pos] == False:
break
answer = scores.most_common(2)
answer = answer[0][1] * answer[1][1]
return answer
ํ
์คํธ 1
์
๋ ฅ๊ฐ ใ [8, 6, 3, 7, 2, 5, 1, 4]
๊ธฐ๋๊ฐ ใ 12
์คํ ๊ฒฐ๊ณผ ใ ํ
์คํธ๋ฅผ ํต๊ณผํ์์ต๋๋ค.
์ถ๋ ฅ ใ [False, True, True, True, True, True, True, True] Counter({0: 1}) [8, 6, 3, 7, 2, 5, 1, 4] 7
[False, True, True, True, True, True, True, False] Counter({0: 2}) [8, 6, 3, 7, 2, 5, 1, 4] 3
[False, True, True, False, True, True, True, False] Counter({0: 3}) [8, 6, 3, 7, 2, 5, 1, 4] 6
[False, True, True, False, True, True, False, False] Counter({0: 4}) [8, 6, 3, 7, 2, 5, 1, 4] 0
[False, False, True, False, True, True, False, False] Counter({0: 4, 1: 1}) [8, 6, 3, 7, 2, 5, 1, 4] 5
[False, False, True, False, True, False, False, False] Counter({0: 4, 1: 2}) [8, 6, 3, 7, 2, 5, 1, 4] 4
[False, False, True, False, False, False, False, False] Counter({0: 4, 1: 3}) [8, 6, 3, 7, 2, 5, 1, 4] 1
[False, False, False, False, False, False, False, False] Counter({0: 4, 1: 3, 2: 1}) [8, 6, 3, 7, 2, 5, 1, 4] 2
- ์ ์ถ!
- ์? ํ ์คํธ ์ผ์ด์ค 2 ์คํจ...
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 2 ใ ์คํจ (๋ฐํ์ ์๋ฌ)
ํ
์คํธ 3 ใ ํต๊ณผ (0.04ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.07ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.06ms, 10.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.05ms, 10.1MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.08ms, 10.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.05ms, 10.3MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.05ms, 10.1MB)
- ์.... ์๊น ๋ฌธ์ ์ฝ์ ๋ ์ฒดํฌํด๋๊ณ ์ฝ๋ฉ์ ์ํ๋ค.
- ์์๊ทธ๋ฃน์ด ํ๋์ผ ๋๋ 0์ด๋ค.
import collections
def solution(cards):
len_cards = len(cards)
unvisited = [True] * len_cards
scores = collections.Counter()
for i in range(len_cards):
if unvisited[i] == True:
scores[i] = 0
pos = i
while True:
unvisited[pos] = False
pos = cards[pos] -1
scores[i] += 1
if unvisited[pos] == False:
break
answer = scores.most_common(2)
if len(answer) == 1:
return 0
else:
return (answer[0][1] * answer[1][1])
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.06ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.06ms, 10.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.05ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.06ms, 10.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.05ms, 10.2MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.06ms, 10.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.05ms, 10.2MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.09ms, 10.2MB)
- ๊ณ ์์ ํ์ด.
- ๊ทธ๋ฅ ๋ฆฌ์คํธ๋ก ํ์ด๋ ๋๋ ๊ฑฐ์๋?
- ์๋๊ฐ ๋น ๋ฅด์ง ์๋ค.
def solution(cards):
answer = []
for i in range(len(cards)):
tmp = []
while cards[i] not in tmp:
tmp.append(cards[i])
i = cards[i] - 1
answer.append([] if sorted(tmp) in answer else sorted(tmp))
answer.sort(key=len)
return len(answer[-1]) * len(answer[-2])
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.3MB)
ํ
์คํธ 2 ใ ํต๊ณผ (7.19ms, 10.1MB)
ํ
์คํธ 3 ใ ํต๊ณผ (2.24ms, 10.3MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.16ms, 10.2MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.15ms, 10.1MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.61ms, 10.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.14ms, 10.1MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.23ms, 10.1MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.16ms, 10.1MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.19ms, 10.3MB)
- ๋ํ๋ฅผ ์ด๊ฒ ๋น ๋ฅด๋ค.
- ์ ๋ ฌ์ ํ์ง ์์๋ ๋๊ณ ...
- ๋์ ๋๋ฆฌ ๋ณด๋จ ๋ํ๊ฐ ๋ ๋น ๋ฅธ...
import heapq
def solution(cards):
answer = 1
alist = []
visit = [0]*len(cards)
for i in range(len(cards)):
cnt = 0
a = cards[i]-1
while True:
if visit[a] == 1:
break
else:
visit[a] = 1
a = cards[a]-1
cnt += 1
heapq.heappush(alist,-cnt)
a = heapq.heappop(alist)
b = heapq.heappop(alist)
answer = a*b
return answer
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.01ms, 10.1MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.05ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.02ms, 10.3MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.02ms, 10.1MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.06ms, 10.1MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.04ms, 10.1MB)
- ํน์๋ ํด์ while sum( ) > 0: ์ผ๋ก ๋ฐ๊พธ์ด๋ณด์๋๋ฐ ๋ณ๋ก?
import collections
def solution(cards):
len_cards = len(cards)
unvisited = [True] * len_cards
scores = collections.Counter()
while sum(unvisited) > 0:
i = unvisited.index(True)
scores[i] = 0
pos = i
while True:
unvisited[pos] = False
pos = cards[pos] -1
scores[i] += 1
if unvisited[pos] == False:
break
answer = scores.most_common(2)
if len(answer) == 1:
return 0
else:
return (answer[0][1] * answer[1][1])
์ ํ์ฑ ํ
์คํธ
ํ
์คํธ 1 ใ ํต๊ณผ (0.02ms, 9.99MB)
ํ
์คํธ 2 ใ ํต๊ณผ (0.04ms, 10.2MB)
ํ
์คํธ 3 ใ ํต๊ณผ (0.04ms, 10.2MB)
ํ
์คํธ 4 ใ ํต๊ณผ (0.06ms, 10.3MB)
ํ
์คํธ 5 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 6 ใ ํต๊ณผ (0.03ms, 10.2MB)
ํ
์คํธ 7 ใ ํต๊ณผ (0.11ms, 10.2MB)
ํ
์คํธ 8 ใ ํต๊ณผ (0.14ms, 10.2MB)
ํ
์คํธ 9 ใ ํต๊ณผ (0.10ms, 10.2MB)
ํ
์คํธ 10 ใ ํต๊ณผ (0.08ms, 10.3MB)
'๊ฒ์ ํ๋ก๊ทธ๋๋ฐ > Python ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค ๋ฐฉ๋ฌธ ๊ธธ์ด (0) | 2023.02.20 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค ํ ์ธ ํ์ฌ (0) | 2023.02.20 |
ํ๋ก๊ทธ๋๋จธ์ค ์ ๋ ฅ๋ง์ ๋๋ก ๋๋๊ธฐ (0) | 2023.02.20 |
ํ๋ก๊ทธ๋๋จธ์ค ํ๋ฐฐ์์ (1) | 2023.02.19 |
ํ๋ก๊ทธ๋๋จธ์ค ๋กค์ผ์ดํฌ ์๋ฅด๊ธฐ (0) | 2023.02.18 |