https://school.programmers.co.kr/learn/courses/30/lessons/258712
๋ฌธ์
๋ฌธ์ ์ค๋ช
์ ๋ฌผ์ ์ง์ ์ ํ๊ธฐ ํ๋ค ๋ ์นด์นด์คํก ์ ๋ฌผํ๊ธฐ ๊ธฐ๋ฅ์ ์ด์ฉํด ์ถํ ์ ๋ฌผ์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๋น์ ์ ์น๊ตฌ๋ค์ด ์ด๋ฒ ๋ฌ๊น์ง ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก์ ๋ฐํ์ผ๋ก ๋ค์ ๋ฌ์ ๋๊ฐ ์ ๋ฌผ์ ๋ง์ด ๋ฐ์์ง ์์ธกํ๋ ค๊ณ ํฉ๋๋ค.
๋ ์ฌ๋์ด ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก์ด ์๋ค๋ฉด, ์ด๋ฒ ๋ฌ๊น์ง ๋ ์ฌ๋ ์ฌ์ด์ ๋ ๋ง์ ์ ๋ฌผ์ ์ค ์ฌ๋์ด ๋ค์ ๋ฌ์ ์ ๋ฌผ์ ํ๋ ๋ฐ์ต๋๋ค.
์๋ฅผ ๋ค์ด A๊ฐ B์๊ฒ ์ ๋ฌผ์ 5๋ฒ ์คฌ๊ณ , B๊ฐ A์๊ฒ ์ ๋ฌผ์ 3๋ฒ ์คฌ๋ค๋ฉด ๋ค์ ๋ฌ์ A๊ฐ B์๊ฒ ์ ๋ฌผ์ ํ๋ ๋ฐ์ต๋๋ค.
๋ ์ฌ๋์ด ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก์ด ํ๋๋ ์๊ฑฐ๋ ์ฃผ๊ณ ๋ฐ์ ์๊ฐ ๊ฐ๋ค๋ฉด, ์ ๋ฌผ ์ง์๊ฐ ๋ ํฐ ์ฌ๋์ด ์ ๋ฌผ ์ง์๊ฐ ๋ ์์ ์ฌ๋์๊ฒ ์ ๋ฌผ์ ํ๋ ๋ฐ์ต๋๋ค.
์ ๋ฌผ ์ง์๋ ์ด๋ฒ ๋ฌ๊น์ง ์์ ์ด ์น๊ตฌ๋ค์๊ฒ ์ค ์ ๋ฌผ์ ์์์ ๋ฐ์ ์ ๋ฌผ์ ์๋ฅผ ๋บ ๊ฐ์
๋๋ค.
์๋ฅผ ๋ค์ด A๊ฐ ์น๊ตฌ๋ค์๊ฒ ์ค ์ ๋ฌผ์ด 3๊ฐ๊ณ ๋ฐ์ ์ ๋ฌผ์ด 10๊ฐ๋ผ๋ฉด A์ ์ ๋ฌผ ์ง์๋ -7์
๋๋ค. B๊ฐ ์น๊ตฌ๋ค์๊ฒ ์ค ์ ๋ฌผ์ด 3๊ฐ๊ณ ๋ฐ์ ์ ๋ฌผ์ด 2๊ฐ๋ผ๋ฉด B์ ์ ๋ฌผ ์ง์๋ 1์
๋๋ค. ๋ง์ฝ A์ B๊ฐ ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ์ ์ด ์๊ฑฐ๋ ์ ํํ ๊ฐ์ ์๋ก ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์๋ค๋ฉด, ๋ค์ ๋ฌ์ B๊ฐ A์๊ฒ ์ ๋ฌผ์ ํ๋ ๋ฐ์ต๋๋ค.
๋ง์ฝ ๋ ์ฌ๋์ ์ ๋ฌผ ์ง์๋ ๊ฐ๋ค๋ฉด ๋ค์ ๋ฌ์ ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ง ์์ต๋๋ค.
์์์ ์ค๋ช
ํ ๊ท์น๋๋ก ๋ค์ ๋ฌ์ ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๋, ๋น์ ์ ์ ๋ฌผ์ ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์น๊ตฌ๊ฐ ๋ฐ์ ์ ๋ฌผ์ ์๋ฅผ ์๊ณ ์ถ์ต๋๋ค.
์น๊ตฌ๋ค์ ์ด๋ฆ์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด friends ์ด๋ฒ ๋ฌ๊น์ง ์น๊ตฌ๋ค์ด ์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ ๊ธฐ๋ก์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด gifts๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ด๋, ๋ค์๋ฌ์ ๊ฐ์ฅ ๋ง์ ์ ๋ฌผ์ ๋ฐ๋ ์น๊ตฌ๊ฐ ๋ฐ์ ์ ๋ฌผ์ ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์ ํ ์ฌํญ
- 2 ≤ friends์ ๊ธธ์ด = ์น๊ตฌ๋ค์ ์ ≤ 50
- friends์ ์์๋ ์น๊ตฌ์ ์ด๋ฆ์ ์๋ฏธํ๋ ์ํ๋ฒณ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๊ธธ์ด๊ฐ 10 ์ดํ์ธ ๋ฌธ์์ด์ ๋๋ค.
- ์ด๋ฆ์ด ๊ฐ์ ์น๊ตฌ๋ ์์ต๋๋ค.
- 1 ≤ gifts์ ๊ธธ์ด ≤ 10,000
- gifts์ ์์๋ "A B"ํํ์ ๋ฌธ์์ด์ ๋๋ค.
- A๋ ์ ๋ฌผ์ ์ค ์น๊ตฌ์ ์ด๋ฆ์ B๋ ์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ์ ์ด๋ฆ์ ์๋ฏธํ๋ฉฐ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
- A์ B๋ friends์ ์์์ด๋ฉฐ A์ B๊ฐ ๊ฐ์ ์ด๋ฆ์ธ ๊ฒฝ์ฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
friends | gifts | result |
["muzi", "ryan", "frodo", "neo"] | ["muzi frodo", "muzi frodo", "ryan muzi", "ryan muzi", "ryan muzi", "frodo muzi", "frodo ryan", "neo muzi"] | 2 |
["joy", "brad", "alessandro", "conan", "david"] | ["alessandro brad", "alessandro joy", "alessandro conan", "david alessandro", "alessandro david"] | 4 |
["a", "b", "c"] | ["a b", "b a", "c a", "a c", "a c", "c a"] | 0 |
์์ค ์ฝ๋
# 1
def solution(friends, gifts):
num = len(friends)
# ์ ๋ฌผ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก ๋ฐ ์ ์ ์์ฑ
record = []
score = [0]*num
for name in friends:
take_list = [0]*num
for give_take in gifts:
give, take = give_take.split(" ")
if name == give:
take_list[friends.index(take)] += 1
score[friends.index(give)] += 1
elif name == take:
score[friends.index(take)] -= 1
record.append(take_list)
# ๊ธฐ๋ก์ ๋๋ฉด์ ์ ๋ฌผ์ ๋ ๋ง์ด ์ค ์น๊ตฌ์ cnt ๋ํ๊ธฐ
# ๊ธฐ๋ก์ด ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด ์ ๋ฌผ์ง์ score๋ฅผ ๋น๊ต
cnt = [0]*num
for i in range(1,num):
for j in range(num-1):
if i > j:
if record[i][j] > record[j][i]:
cnt[i] += 1
elif record[i][j] < record[j][i]:
cnt[j] += 1
elif i!=j and record[i][j] == record[j][i]:
if score[i] > score[j]:
cnt[i] += 1
elif score[i] < score[j]:
cnt[j] += 1
return max(cnt)
ํ์ด # 1
- ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก์ด record์ ์ ๋ฌผ์ง์๋ฅผ ๋ํ๋ด๋ score๋ฅผ ์ ์
- friends ๋ฆฌ์คํธ ๋๋ฉด์ ์ ๋ฌผ์ง์๋ฅผ ๊ตฌํ๊ณ ์ ๋ฌผ๊ธฐ๋ก์ 2์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ
- friends ๋ฆฌ์คํธ์ ์ด๋ฆ์ด ์ ๋ฌผ์ ์ค ์ด๋ฆ๊ณผ ๊ฐ๋ค๋ฉด take_list์์ ์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ ์ธ๋ฑ์ค์ +1
- ์ ๋ฌผ์ ์ค ๊ฒฝ์ฐ์ ์ ๋ฌผ์ง์์ +1 / ์ ๋ฌผ์ ๋ฐ์ ๊ฒฝ์ฐ์ ์ ๋ฌผ์ง์์ -1
- ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ 2์ฐจ์ ๋ฐฐ์ด record๋ฅผ ๋๋ฉด์ ๊ฐ ์น๊ตฌ๋ค์ด ๋ฐ์ ์ ๋ฌผ์ ๊ฐฏ์ ๊ณ์ฐ
- ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ์น๊ตฌ๊ฐ ๊ฐ๊ฑฐ๋ ์์๊ฐ ๋ฐ๋ ๊ฒฝ์ฐ๋ ์ ์ธํ๊ธฐ ์ํด i>j ์กฐ๊ฑด ์ถ๊ฐ
- ๋ค์๋ฌ์ ๋ฐ์ ์ ๋ฌผ์ ๊ฐฏ์๊ฐ ๋ด๊ธด cnt์์ ๊ฐ์ฅ ํฐ ๊ฐ ๊ตฌํ๊ธฐ
# 2
def solution(friends, gifts):
record = {}
for name1 in friends:
# ์ ๋ฌผ์ง์์ ์ ๋ฌผ๊ธฐ๋ก
record[name1] = [0,{}]
for name2 in friends:
if name1 != name2:
record[name1][1][name2] = 0
for give_take in gifts:
give, take = give_take.split(" ")
record[give][0] += 1 # ์ ๋ฌผ์ง์ ๊ณ์ฐ
record[give][1][take] += 1 # ์ ๋ฌผ์ ์ค ๊ฒฝ์ฐ +1
record[take][0] -= 1 # ์ ๋ฌผ์ง์ ๊ณ์ฐ
record[take][1][give] -= 1 # ์ ๋ฌผ์ ๋ฐ์ ๊ฒฝ์ฐ -1
answer = [0] * len(friends)
for give_name, values in record.items():
give_idx = friends.index(give_name)
score = values[0]
for take_name, cnt in values[1].items():
# cnt๊ฐ 0๋ณด๋ค ํฌ๋ฉด give_name์ด ์ ๋ฌผ์ ๋ ๋ง์ด ์ค ๊ฒฝ์ฐ
if cnt > 0:
answer[give_idx] += 1
# cnt๊ฐ 0์ด๋ฉด ๊ธฐ๋ก์ด ์๊ฑฐ๋ ์ฃผ๊ณ ๋ฐ์ ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
elif cnt == 0:
if score > record[take_name][0]:
answer[give_idx] += 1
return max(answer)
ํ์ด #2
- ์ ๋ฌผ์ง์์ ์ ๋ฌผ๊ธฐ๋ก์ ์ ์ฅํ๋ ๋์
๋๋ฆฌ record ์ ์
- record์ ํค๋ ์ ๋ฌผ์ ์ค ์น๊ตฌ์ ์ด๋ฆ
- record์ ๊ฐ์ ์ ๋ฌผ์ง์์ {์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ:์ ๋ฌผ์ ๊ฐฏ์}
- gifts๋ฅผ ๋๋ฉด์ ์ ๋ฌผ์ง์์ ์ ๋ฌผ์ ๊ฐฏ์๋ฅผ ๊ณ์ฐ
- ์ ๋ฌผ์ ์ค ์น๊ตฌ์ ํค์์ ์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ์๊ฒ +1
- ์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ์ ํค์์ ์ ๋ฌผ์ ์ค ์น๊ตฌ์๊ฒ -1
- ์ ๋ฌผ์ ๋ง์ด ์ฃผ์์ ๊ฒฝ์ฐ์๋ + / ์ ๋ฌผ์ ๋ง์ด ๋ฐ์์ ๊ฒฝ์ฐ์๋ -
- record๋ฅผ ๋๋ฉด์ ๋ฐ์์ผํ๋ ์ ๋ฌผ์ ๊ฐฏ์๋ฅผ answer์ ์ ์ฅ
- record์ ํค๋ ์ ๋ฌผ์ ์ค ์น๊ตฌ์ ์ด๋ฆ / ๊ฐ์ ์ ๋ฌผ์ง์์ {์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ:์ ๋ฌผ์ ๊ฐฏ์}
- ์ ๋ฌผ์ ์ค ์น๊ตฌ์ ์ธ๋ฑ์ค๋ฅผ give_index, ์ ๋ฌผ์ง์๋ฅผ score์ ์ ์ฅ
- ์ ๋ฌผ์ ๋ฐ์ ์น๊ตฌ์ cnt๊ฐ 0๋ณด๋ค ํฌ๋ฉด ์ ๋ฌผ์ ๋ง์ด ์ค ๊ฒฝ์ฐ์ด๋ฏ๋ก answer + 1
- cnt๊ฐ 0์ด๋ฉด ๊ธฐ๋ก์ด ์๊ฑฐ๋ ์ฃผ๊ณ ๋ฐ์ ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ฏ๋ก ์ ๋ฌผ์ง์๋ฅผ ๋น๊ต
- ๋ค์๋ฌ์ ๋ฐ์ ์ ๋ฌผ์ ๊ฐฏ์๊ฐ ๋ด๊ธด answer์์ ๊ฐ์ฅ ํฐ ๊ฐ ๊ตฌํ๊ธฐ
์ฒ์์ ๋์ ๋๋ฆฌ๋ก ํ์ด๋ณด๋ ค๊ณ ํ๋ค๊ฐ ์ ์๋ผ์ ๋ฌธ์ ์ ์๋๋๋ก 2์ฐจ์ ๋ฐฐ์ด๋ก ํ์๋ค. ์ฝ๊ฐ ํท๊ฐ๋ฆฌ๊ธด ํ์ง๋ง ํ๊ธด ํ์๋๋ฐ ์๊ฐ์ด ์ข ์ค๋ ๊ฑธ๋ ธ๋ค. ๋ค๋ฅธ ํ์ด๋ฅผ ์ฐธ๊ณ ํด์ ๋ ๋ฒ์งธ ํ์ด์ ๋์ ๋๋ฆฌ๋ก ํ์๋๋ ์๊ฐ์ด ๋ง์ด ๋จ์ถ๋์๋ค. ์๊ฐํ๋๊ฑด ์ด๋ ค์ด๋ฐ ๋ฐฉ์์ ์๊ฐํด๋ธ๋ค๋ฉด ํ์ด๋ ํ ๋ง ํ ๊ฒ ๊ฐ๋ค. ๐ ๐
'์ฝ๋ฉ ๋ฌธ์ ํ์ด ๐ป > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.2 ์ฃผ์๊ฐ๊ฒฉ (0) | 2024.07.01 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.2 ๊ดํธ ํ์ ํ๊ธฐ (0) | 2024.07.01 |
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 [PCCP ๊ธฐ์ถ๋ฌธ์ ] 1๋ฒ / ๋ถ๋ ๊ฐ๊ธฐ (1) | 2024.01.07 |
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 ๊ณต์ ์ฐ์ฑ (0) | 2024.01.05 |
[ํ๋ก๊ทธ๋๋จธ์ค / ํ์ด์ฌ] Lv.1 ๊ธฐ์ฌ๋จ์์ ๋ฌด๊ธฐ (1) | 2023.12.22 |