๐Ÿ’ป์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œํ’€์ด18

์ง€๋ฏผ์„œยท2023๋…„ 3์›” 16์ผ
0

coding test

๋ชฉ๋ก ๋ณด๊ธฐ
17/30

Chapter11. ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

[๋ฌธ์ œ46] ์ˆœ์œ„ - Level3

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

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

[์ œํ•œ์‚ฌํ•ญ]

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

[์ฝ”๋“œ์ž‘์„ฑ]

1. ์Šน/ํŒจ ์ •๋ณด๋ฅผ ๋‹ด์„ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ •์˜

from collections import defaultdict

def solution(n, results):
	answer = 0
    win, lose = defaultdict(set), defaultdict(set)

2. ์ฃผ์–ด์ง„ ๊ฒฐ๊ณผ์—์„œ ์Šน/ํŒจ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๊ธฐ๋ก

for winner, loser in results:
	win[loser].add(winner)
    lose[winner].add(loser)

3. ํŠน์ˆ˜ ์กฐ๊ฑด์„ ๋ฐ˜์˜

for i in range(1, n+1)
	for winner in win[i]:
    	lose[winner].update(lose[i])
    for loser in lose[i]:
    	win[loser].update(winner[i])

4. ๊ฐ ์„ ์ˆ˜๊ฐ€ ์Šน/ํŒจ ๊ฒฝ๊ธฐ๋ฅผ ํ•ฉ์นœ ๊ฒฐ๊ณผ๊ฐ€ ์ด n - 1๊ฐœ์ธ์ง€ ํ™•์ธ

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

[์ „์ฒด์ฝ”๋“œ]

from collections import defaultdict

def solution(n, results):
	answer = 0
    win, lose = defaultdict(set), defaultdict(set)
    
    for winner, loser in results:
		win[loser].add(winner)
    	lose[winner].add(loser)
        
    for i in range(1, n+1)
      for winner in win[i]:
          lose[winner].update(lose[i])
      for loser in lose[i]:
          win[loser].update(winner[i])
          
    for i in range(1, n+1)
      if len(win[i]) + len(lose[i]) == n - 1:
          answer += 1
          
	return answer

[์ฝ”๋“œ์ž‘์„ฑ2]

1. ์Šน/ํŒจ ์ •๋ณด๋ฅผ ๋‹ด์„ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑ

def solution(n, results):
	total = [[0 for i in range(n)] for j in range(n)]

	for i in rnage(n):
    	total[i][i] = 'SELF'

2. ์ฃผ์–ด์ง„ ๊ฒฐ๊ณผ์—์„œ ์Šน/ํŒจ ์ •๋ณด๋ฅผ ๊ธฐ๋ก

for result in results:
	total[result[0] - 1][result[1] - 1] = 'WINS'
    total[result[1] - 1][result[0] - 1] = 'LOSE'

3. ํ”Œ๋กœ์ด๋“œ-์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

for k in range(n):
	for i in range(n):
    	for j in range(n):
        	if total[i][k] == 'WINS' and total[k][j] == 'WINS': total[i][j] = 'WINS'
            if total[k][j] == 'LOSE' and total[k][j] == 'LOSE' : total[i][j] = 'LOSE'

4. ์ •ํ•ด์ง€์ง€ ์•Š์€ ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธ

answer = 0
	
for i in total:
	if 0 not in i: answer += 1

[์ „์ฒด์ฝ”๋“œ2]

def solution(n, results):
	total = [['????' for i in range(n)] for j in range(n)]

	for i in rnage(n):
    	total[i][i] = 'SELF'
        
    for result in results:
        total[result[0] - 1][result[1] - 1] = 'WINS'
        total[result[1] - 1][result[0] - 1] = 'LOSE'
        
    for k in range(n):
        for i in range(n):
            for j in range(n):
                if total[i][k] == 'WINS' and total[k][j] == 'WINS': total[i][j] = 'WINS'
                if total[k][j] == 'LOSE' and total[k][j] == 'LOSE' : total[i][j] = 'LOSE'
                
    answer = 0

    for i in total:
        if '????' not in 1:
        	answer += 1
            
    return answer
profile
๐Ÿ’ป + ๐ŸŽฅ

0๊ฐœ์˜ ๋Œ“๊ธ€