์ ์ ์ฌ์ ๋ฌด์ง๋ ๊ฒ์ํ ๋ถ๋ ์ด์ฉ์๋ฅผ ์ ๊ณ ํ๊ณ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ผ๋ก ๋ฐ์กํ๋ ์์คํ ์ ๊ฐ๋ฐํ๋ ค ํฉ๋๋ค. ๋ฌด์ง๊ฐ ๊ฐ๋ฐํ๋ ค๋ ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์์ ์ ์ฒด ์ ์ ๋ชฉ๋ก์ด ["muzi", "frodo", "apeach", "neo"]์ด๊ณ , k = 2(์ฆ, 2๋ฒ ์ด์ ์ ๊ณ ๋นํ๋ฉด ์ด์ฉ ์ ์ง)์ธ ๊ฒฝ์ฐ์ ์์์ ๋๋ค.
์ ์ ID | ์ ์ ๊ฐ ์ ๊ณ ํ ID | ์ค๋ช |
---|---|---|
"muzi" | "frodo" | "muzi"๊ฐ "frodo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"apeach" | "frodo" | "apeach"๊ฐ "frodo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"frodo" | "neo" | "frodo"๊ฐ "neo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"muzi" | "neo" | "muzi"๊ฐ "neo"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
"apeach" | "muzi" | "apeach"๊ฐ "muzi"๋ฅผ ์ ๊ณ ํ์ต๋๋ค. |
๊ฐ ์ ์ ๋ณ๋ก ์ ๊ณ ๋นํ ํ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ ID | ์ ๊ณ ๋นํ ํ์ |
---|---|
"muzi" | 1 |
"frodo" | 2 |
"apeach" | 0 |
"neo" | 2 |
์ ์์์์๋ 2๋ฒ ์ด์ ์ ๊ณ ๋นํ "frodo"์ "neo"์ ๊ฒ์ํ ์ด์ฉ์ด ์ ์ง๋ฉ๋๋ค. ์ด๋, ๊ฐ ์ ์ ๋ณ๋ก ์ ๊ณ ํ ์์ด๋์ ์ ์ง๋ ์์ด๋๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์ ID | ์ ์ ๊ฐ ์ ๊ณ ํ ID | ์ ์ง๋ ID |
---|---|---|
"muzi" | ["frodo", "neo"] | ["frodo", "neo"] |
"frodo" | ["neo"] | ["neo"] |
"apeach" | ["muzi", "frodo"] | ["frodo"] |
"neo" | ์์ | ์์ |
๋ฐ๋ผ์ "muzi"๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ 2ํ, "frodo"์ "apeach"๋ ๊ฐ๊ฐ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ 1ํ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์ด์ฉ์์ ID๊ฐ ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด id_list
, ๊ฐ ์ด์ฉ์๊ฐ ์ ๊ณ ํ ์ด์ฉ์์ ID ์ ๋ณด๊ฐ ๋ด๊ธด ๋ฌธ์์ด ๋ฐฐ์ด report
, ์ ์ง ๊ธฐ์ค์ด ๋๋ ์ ๊ณ ํ์ k
๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ์ ์ ๋ณ๋ก ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ ํ์๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
id_list
์ ๊ธธ์ด โค 1,000id_list
์ ์์ ๊ธธ์ด โค 10id_list
์ ์์๋ ์ด์ฉ์์ id๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ด๋ฉฐ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.id_list
์๋ ๊ฐ์ ์์ด๋๊ฐ ์ค๋ณตํด์ ๋ค์ด์์ง ์์ต๋๋ค.report
์ ๊ธธ์ด โค 200,000report
์ ์์ ๊ธธ์ด โค 21report
์ ์์๋ "์ด์ฉ์id ์ ๊ณ ํid"ํํ์ ๋ฌธ์์ด์
๋๋ค.k
โค 200, k
๋ ์์ฐ์์
๋๋ค.id_list
์ ๋ด๊ธด id ์์๋๋ก ๊ฐ ์ ์ ๊ฐ ๋ฐ์ ๊ฒฐ๊ณผ ๋ฉ์ผ ์๋ฅผ ๋ด์ผ๋ฉด ๋ฉ๋๋ค.id_list | report | k | result |
---|---|---|---|
["muzi", "frodo", "apeach", "neo"] | ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] | 2 | [2,1,1,0] |
["con", "ryan"] | ["ryan con", "ryan con", "ryan con", "ryan con"] | 3 | [0,0] |
์ ์ถ๋ ฅ ์ #1
๋ฌธ์ ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
"ryan"์ด "con"์ 4๋ฒ ์ ๊ณ ํ์ผ๋, ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ฐ๋ผ ํ ์ ์ ๊ฐ ๊ฐ์ ์ ์ ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ๊ณ ํ ๊ฒฝ์ฐ๋ ์ ๊ณ ํ์ 1ํ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ "con"์ 1ํ ์ ๊ณ ๋นํ์ต๋๋ค. 3๋ฒ ์ด์ ์ ๊ณ ๋นํ ์ด์ฉ์๋ ์์ผ๋ฉฐ, "con"๊ณผ "ryan"์ ๊ฒฐ๊ณผ ๋ฉ์ผ์ ๋ฐ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ [0, 0]์ return ํฉ๋๋ค.
def solution(id_list, report, k):
warning = {}
result = [0] * len(id_list) # ๊ฐ ์ฌ์ฉ์๊ฐ ๋ฐ์ ๋ฉ์ผ ์๋ฅผ ์ ์ฅํ ๋ฆฌ์คํธ
report = set(report) # ์ค๋ณต ์ ๊ณ ๋ฅผ ์ ๊ฑฐ
# ์ ๊ณ ์ ๋ณด ์ฒ๋ฆฌ
for i in report:
tmp = i.split() # ๊ณต๋ฐฑ์ ๊ธฐ์ค์ผ๋ก ์ ๊ณ ์์ ๋์์๋ฅผ ๋ถ๋ฆฌ
reporter, target = tmp[0], tmp[1]
# ํ๊ฒ์ ๋ํ ์ ๊ณ ์ ๋ณด๊ฐ warning์ ์์ผ๋ฉด ์ด๊ธฐํ
if target not in warning:
warning[target] = [0, []] # [์ ๊ณ ํ์, ์ ๊ณ ํ ์ฌ์ฉ์ ๋ฆฌ์คํธ]
# ์ ๊ณ ์๊ฐ ์ค๋ณต๋์ง ์์ผ๋ฉด ์ถ๊ฐ
if reporter not in warning[target][1]:
warning[target][0] += 1
warning[target][1].append(reporter)
# ์ ๊ณ ํ์๊ฐ k๋ฒ ์ด์์ธ ๊ฒฝ์ฐ ๋ฉ์ผ ๋ฐ์ก
for target, info in warning.items():
if info[0] >= k: # ์ ๊ณ ํ์๊ฐ k ์ด์์ธ ๊ฒฝ์ฐ
for reporter in info[1]: # ํด๋น ์ฌ์ฉ์๋ฅผ ์ ๊ณ ํ ์ฌ๋๋ค์๊ฒ ๋ฉ์ผ ๋ฐ์ก
result[id_list.index(reporter)] += 1
return result