[Programmers] ν보ν€
Updated:
ν보ν€
νλ³΄ν€ λ₯Ό ν΄λ¦νλ©΄ λ°λ‘ μ΄λνλ€.
릴λ μ΄μ μ΄ μ£Όμ΄μ§λ©΄ ν΄λΉ 릴λ μ΄μ μμ λͺ κ°μ ν보ν€λ₯Ό λ§λ€ μ μλμ§ λ°ννλ©΄ λλ λ¬Έμ .
μμ±μ κ°μ§κ³ λͺ¨λ ν€ μ‘°ν©μ λ§λ λ€ μ μΌμ±, μ΅μμ±μ λͺ¨λ λ§μ‘±νλμ§ νμΈνλ©΄ λλ€.
ννλ‘ μ£Όμ΄μ§κΈ° λλ¬Έμ map, zip μ μ΄μ©ν΄ μμ±λΌλ¦¬ λ¬Άμ λ€ μμνλ€.
λ§μ½ μμ±μ΄ λ€ κ°μ§κ° μλ 릴λ μ΄μ μ΄ μ£Όμ΄μ§λ€λ©΄ λ§λ€ μ μλ λͺ¨λ ν€ μ‘°ν©μ
(0), (1), (2), (3), (0, 1), (0, 2), (0, 3), (0, 1, 2), (0, 1, 3), (1, 2, 3), (0, 1, 2, 3) μ΄ μλ€.
μ΅μμ±μ νμΈν΄μΌνκΈ° λλ¬Έμ μ‘°ν©μ ν¬κΈ°κ° μμ μμλΆν° 체ν¬νλ©΄ λλ€.
μ°μ κ° μμ±μ΄ ν€κ° λ μ μλμ§ κ²μ¬ νλ€. ν€κ° λ μ μλ κ²½μ° candidate 리μ€νΈμ λ΄λλ€.
λ§μ½ κ²μ¬νλ ν€ μ‘°ν©μ μΌλΆκ° μ΄λ―Έ candidate 리μ€νΈμ μλ€λ©΄ μ μΈνλ€. μ΅μμ±μ μλ° λκΈ° λλ¬Έμ΄λ€.
μ΄λ κ² λͺ¨λ ν€ μ‘°ν©μ κ²μ¬ ν λ€ candidate 리μ€νΈ κΈΈμ΄λ₯Ό λ°ν νλ©΄ λλ€.
from itertools import combinations
def solution(relation):
attribute = list(map(list, zip(*relation)))
candidate = []
for i in range(1, len(attribute) + 1):
attribute_num = map(list, combinations([val for val in range(len(attribute))], i))
for j in attribute_num:
check = []
for k in j:
check.append(attribute[k])
if len(set(zip(*check))) == len(attribute[0]):
for cur in candidate:
if cur.issubset(set(j)):
break
else:
candidate.append(set(j))
return len(candidate)
Leave a comment