๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ„ฐ๋”” 7์ฃผ์ฐจ] ๊ทธ๋ž˜ํ”„ ์ˆœ์œ„ Lv.3 - ํŒŒ์ด์ฌ(Python) / set ํ•จ์ˆ˜ ํ™œ์šฉ

๐Ÿ“‘ ๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/49191

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ˆœ์œ„

5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2

programmers.co.kr

๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

n๋ช…์˜ ๊ถŒํˆฌ์„ ์ˆ˜๊ฐ€ ๊ถŒํˆฌ ๋Œ€ํšŒ์— ์ฐธ์—ฌํ–ˆ๊ณ  ๊ฐ๊ฐ 1๋ฒˆ๋ถ€ํ„ฐ n๋ฒˆ๊นŒ์ง€ ๋ฒˆํ˜ธ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ถŒํˆฌ ๊ฒฝ๊ธฐ๋Š” 1๋Œ€1 ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰์ด ๋˜๊ณ , ๋งŒ์•ฝ A ์„ ์ˆ˜๊ฐ€ B ์„ ์ˆ˜๋ณด๋‹ค ์‹ค๋ ฅ์ด ์ข‹๋‹ค๋ฉด A ์„ ์ˆ˜๋Š” B ์„ ์ˆ˜๋ฅผ ํ•ญ์ƒ ์ด๊น๋‹ˆ๋‹ค. ์‹ฌํŒ์€ ์ฃผ์–ด์ง„ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์„ ์ˆ˜๋“ค์˜ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ๋ ค ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡๋ช‡ ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์‹คํ•˜์—ฌ ์ •ํ™•ํ•˜๊ฒŒ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์„ ์ˆ˜์˜ ์ˆ˜ n, ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์€ 2์ฐจ์› ๋ฐฐ์—ด results๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์ •ํ™•ํ•˜๊ฒŒ ์ˆœ์œ„๋ฅผ ๋งค๊ธธ ์ˆ˜ ์žˆ๋Š” ์„ ์ˆ˜์˜ ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ์‚ฌํ•ญ

  • ์„ ์ˆ˜์˜ ์ˆ˜๋Š” 1๋ช… ์ด์ƒ 100๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋Š” 1๊ฐœ ์ด์ƒ 4,500๊ฐœ ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • results ๋ฐฐ์—ด ๊ฐ ํ–‰ [A, B]๋Š” A ์„ ์ˆ˜๊ฐ€ B ์„ ์ˆ˜๋ฅผ ์ด๊ฒผ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ์—๋Š” ๋ชจ์ˆœ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

n/ results/ return

5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

2๋ฒˆ ์„ ์ˆ˜๋Š” [1, 3, 4] ์„ ์ˆ˜์—๊ฒŒ ํŒจ๋ฐฐํ–ˆ๊ณ  5๋ฒˆ ์„ ์ˆ˜์—๊ฒŒ ์Šน๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 4์œ„์ž…๋‹ˆ๋‹ค.
5๋ฒˆ ์„ ์ˆ˜๋Š” 4์œ„์ธ 2๋ฒˆ ์„ ์ˆ˜์—๊ฒŒ ํŒจ๋ฐฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 5์œ„์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด โžก๏ธ set() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ win, lose ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ๋‹ค.

 ex) win[1]={2,3,4} : 1๋ฒˆ์ด ์ด๊ธด ์‚ฌ๋žŒ์œผ๋กœ 2,3,4๋ฒˆ์ด ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

 ex) lose[2]={1,5}: 2๋ฒˆ์ด ์ง„ ์‚ฌ๋žŒ์œผ๋กœ 1,5๋ฒˆ์ด ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

 ์ด๊ธฐ๊ณ  ์ง„ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ์ด๊ธด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ง„ ์‚ฌ๋žŒ๋“ค์€, ์—ฌ์ „ํžˆ ๋‚ด๊ฐ€ ์ด๊ธด๋‹ค๋Š” ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.

 

โœ”๏ธ ์ฆ‰ A๊ฐ€ ์ด๊ธด ์‚ฌ๋žŒ๋“ค(win[A]: A์—๊ฒŒ ์ง„ ์‚ฌ๋žŒ๋“ค)์€, A๊ฐ€ ์ง„ ์‚ฌ๋žŒ๋“ค(lose[A]: A๋ฅผ ์ด๊ธด ์‚ฌ๋žŒ๋“ค)์—๊ฒŒ๋„ ์ง€๋Š” ๊ฒƒ์ด๋‹ค.

 ๋ฐ˜๋Œ€๋กœ A๊ฐ€ ์ง„ ์‚ฌ๋žŒ๋“ค(lose[A]: A๋ฅผ ์ด๊ธด ์‚ฌ๋žŒ๋“ค)์€ A๊ฐ€ ์ด๊ธด ์‚ฌ๋žŒ๋“ค(win[A]: A์—๊ฒŒ ์ง„ ์‚ฌ๋žŒ๋“ค)์—๊ฒŒ๋„ ์ด๊ธธ ์ˆ˜ ์žˆ๋‹ค.

 

 ์ด ๋•Œ, ์ค‘๋ณต์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ(A>C/ B>C/ A>B์ธ ๊ฒฝ์šฐ) set()ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ํŒŒ์ด์ฌ(Python)

def solution(n, results):
    win = {}
    lose = {}
    for i in range(n+1):
        win[i] = set()
        lose[i] = set()

    for result in results:
        winner = result[0]
        loser = result[1]

        win[winner].add(loser)
        lose[loser].add(winner)

    for i in range(1, n+1):
        # i๋ฒˆ์งธ ์‚ฌ๋žŒ์—๊ฒŒ ์ด๊ธด ์‚ฌ๋žŒ๋“ค
        # i๋ฒˆ์งธ๊ฐ€ ์ด๊ธด ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ์ด๊ธด๋‹ค.
        for winner in lose[i]:
            win[winner].update(win[i])
        # i๋ฒˆ์งธ ์‚ฌ๋žŒ์—๊ฒŒ ์ง„ ์‚ฌ๋žŒ๋“ค
        # i๋ฒˆ์งธ๊ฐ€ ์ง„ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ์ง„๋‹ค.
        for loser in win[i]:
            lose[loser].update(lose[i])

    answer = 0
    for i in range(1, n+1):
        if len(win[i])+len(lose[i]) == (n-1):
            answer += 1

    return answer


#์˜ˆ์ œ
n = 5
results = [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]]

#๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(solution(n, results))

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ