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์ฐจ์› ๋ฐฐ์—ด๋กœ ํ’€์—ˆ๋‹ค. ์•ฝ๊ฐ„ ํ—ท๊ฐˆ๋ฆฌ๊ธด ํ–ˆ์ง€๋งŒ ํ’€๊ธด ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์ข€ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค. ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๋‘ ๋ฒˆ์งธ ํ’€์ด์˜ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ํ’€์—ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ด ๋งŽ์ด ๋‹จ์ถ•๋˜์—ˆ๋‹ค. ์ƒ๊ฐํ•˜๋Š”๊ฑด ์–ด๋ ค์šด๋ฐ ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด๋‚ธ๋‹ค๋ฉด ํ’€์ด๋Š” ํ•  ๋งŒ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค. ๐ŸŽ ๐ŸŽ

 

+ Recent posts