๐ฑ ๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ฑ ํ์ด
1. ๋ณ์ ์ค์
๋ฌธ์ ์ค๋ช ์ ์์ ๊ฐ์ด ์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ๊ณผ ์ ๋ฌผ ์ง์๋ฅผ ํ๋ก ๋ํ๋ด์ฃผ๋๋ฐ, ์ด๊ฑธ ๊ทธ๋๋ ๊ตฌํํ๋ฉด ๋ฉ๋๋ค!
table
์ ์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ์ ๊ฐ์๋ฅผ ๋ด์ 2์ฐจ์ ๋ฆฌ์คํธ์ด๊ณ , gift_index
๋ ์ ๋ฌผ์ง์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ์
๋๋ค. answer
๋ ๋ค์ ๋ฌ์ ๊ฐ๊ฐ ๋ฐ์ ์ ๋ฌผ ๊ฐ์๋ฅผ ๋ด์ ๋ฆฌ์คํธ์ด๋ค. ์ฆ, answer
๋ฆฌ์คํธ์ ์๋ ์ต๋๊ฐ์ด ์ ๋ต์ด ๋ฉ๋๋ค.
table = [[0 for _ in range(len(friends))] for __ in range(len(friends))]
gift_index = [0] * len(friends)
answer = [0] * len(friends)
2. ์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ ๊ฐ์์ ์ ๋ฌผ ์ง์ ์ธ๊ธฐ
์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ ๊ธฐ๋ก์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด gifts
๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ฉด์ ์ ๋ฌผ์ง์์ ์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ ๊ฐ์๋ฅผ ์นด์ดํ
ํด์ table
๊ณผ gift_index
๋ฅผ ์ฑ์๋๊ฐ๋๋ค.
for gift in gifts:
give, take = gift.split(" ")
give_idx, take_idx = friends.index(give), friends.index(take)
gift_index[give_idx] += 1
gift_index[take_idx] -= 1
table[give_idx][take_idx] += 1
3. ๋ค์๋ฌ์ ๋ฐ์ ์ ๋ฌผ ๊ณ์ฐํ๊ธฐ
2์ฐจ์ ๋ฆฌ์คํธ table
์ ์ ๋๋ก ์ฑ์ฐ๋ฉด ์์ ๊ฐ์ด ์์ฑ๋์์ ๊ฒ์
๋๋ค. ์ด์ ์ด table
์ ๋๋ฉด์ ๋ฐ์ ์ ๋ฌผ์ ๊ฐ์๋ฅผ ๊ณ์ฐํด์ฃผ๋ฉด๋๋๋ฐ, ์์ ๊ทธ๋ฆผ์์ ๊ฐ์ ์์ ์นธ๋ผ๋ฆฌ ๋์๋น๊ต๋ฅผ ํด์ ๋ ์ ๋ฌผ์ ๋ง์ด ์ค ์ฌ๋์ด ๋ค์ ๋ฌ์ ๋ฐ์ ์ ๋ฌผ์ +1 ํด์ค๋๋ค. ๋์๋น๊ต๋ฅผ ํ๋๋ฐ ๊ฐ์ด ๊ฐ๋ค๋ฉด ์ ๋ฌผ ์ง์๋ฅผ ๋น๊ตํ๋ฉด๋ฉ๋๋ค.
๋ฐ๋ผ์ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ ํ์๊ฐ ์๊ณ , ๋ฐ๋ง ๋๋ฉด ๋ฉ๋๋ค! ๋ฐ๋ผ์ ์๊ฐ ๋ณต์ก๋๋ $O(\frac{n^2}{2})$๊ฐ ๋ฉ๋๋ค.
for i in range(len(friends)):
for j in range(i + 1, len(friends)):
if table[i][j] > table[j][i]: # i๊ฐ ์ค ํ์๊ฐ ๋ ๋ง์
answer[i] += 1
elif table[i][j] < table[j][i]: # j๊ฐ ์ค ํ์๊ฐ ๋ ๋ง์
answer[j] += 1
else:
if gift_index[i] > gift_index[j]:
answer[i] += 1
elif gift_index[i] < gift_index[j]:
answer[j] += 1
๐ฑ ์ ๋ต
def solution(friends, gifts):
answer = [0] * len(friends)
table = [[0 for _ in range(len(friends))] for __ in range(len(friends))]
# ์ ๋ฌผ ์ง์ ๊ณ์ฐ
gift_index = [0] * len(friends)
for gift in gifts:
give, take = gift.split(" ")
give_idx, take_idx = friends.index(give), friends.index(take)
gift_index[give_idx] += 1
gift_index[take_idx] -= 1
table[give_idx][take_idx] += 1
for i in range(len(friends)):
for j in range(i + 1, len(friends)):
if table[i][j] > table[j][i]: # i๊ฐ ์ค ํ์๊ฐ ๋ ๋ง์
answer[i] += 1
elif table[i][j] < table[j][i]: # j๊ฐ ์ค ํ์๊ฐ ๋ ๋ง์
answer[j] += 1
else:
if gift_index[i] > gift_index[j]:
answer[i] += 1
elif gift_index[i] < gift_index[j]:
answer[j] += 1
return max(answer)
'Algorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌธ์์ด ๊ณ์ฐํ๊ธฐ (Python, ๋ฌธ์์ด) (0) | 2023.06.14 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์น์์ด(1) (Python, ๋ฌธ์์ด) (0) | 2023.06.14 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ณต์ ์ฐ์ฑ (Python) (0) | 2023.06.14 |
[Programmers] ๋จ์ด ๋ณํ (Python, BFS) (0) | 2023.02.23 |
[Programmers] ๋คํธ์ํฌ(BFS/DFS ํ์ด | Python) (0) | 2023.02.23 |
๋๊ธ