๐กsolutions )
๐ฌ ํด๋น ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋ณดํค ๊ฐ๋ ์ ์๊ณ ์์ผ๋ฉด ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค
๐ฌ ๋ก์ง์ ํฌ๊ฒ 3๋จ๊ณ => ์ ์ฒด ์กฐํฉ ๊ตฌํ๊ธฐ / ์ ์ผ์ฑ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง ๊ฑฐ๋ฅด๊ธฐ / ์ต์์ฑ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ ์ ๊ฑฐ
๐ฌ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ itertools ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ, ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ ์์๋ก combinations ์กฐํฉ ๊ตฌํ๊ธฐ
๐ฌ ๊ฐ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๋ชจ๋ ์์ฑ๋ค์ ํํ ํํ๋ก ๋ฝ๊ณ ๊ทธ ๊ฐ์๊ฐ, ์ ์ฒด ํ์ ๊ฐ์์ ๋์ผํ์ง ํ์ธ ํ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง unique ๋ฆฌ์คํธ์ ๋ด๊ธฐ (์ ์ผ์ฑ์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ)
๐ฌ ์ต์์ฑ์ ๊ฒฝ์ฐ unique ๋ฆฌ์คํธ์์ ํ๋์ฉ ๋ฝ๊ณ , ๊ทธ ๋ค์ ์์๋ค๊ณผ์ ๊ต์งํฉ์ ๊ตฌํด์ ๊ธธ์ด๋ฅผ ๋น๊ตํ๋ค. ๊ธธ์ด๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ง ์์๋ค์ด ๊ฒน์น๋ ๊ฒฝ์ฐ์ด๋ ์ต์์ฑ์ ๋ง์กฑํ์ง ์์ discard๋ก ์ ๊ฑฐ. remove์ ๊ฒฝ์ฐ ์ง์ฐ๋ ค๋ ์์๊ฐ ์์ผ๋ฉด KeyError๊ฐ ๋๋ฏ๋ก discard๋ก ์ ๊ฑฐ
๐ ์๋ ์ฐธ๊ณ
์ด๋ฒ ๋ฌธ์ ์์๋ set ์๋ฃํ์ ํน์ฑ์ ํ์ฉํ๋ค. ์๋๋ ๋ช ๊ฐ์ง ๋ฉ์๋ ์ ๋ฆฌ |
1. remove() v.s discard() ๋ฉ์๋ ๋น๊ต remove()๋ ์ง์ฐ๋ ค๋ element๊ฐ ์์ผ๋ฉด KeyError ๋ฐ์, discard()๋ ์ง์ฐ๋ ค๋ element ์์ด๋ ์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ค. |
2. intersection() ๊ต์งํฉ์ ๊ตฌํ๋ ๋ฉ์๋๋ก ์๋์ฒ๋ผ &๊ธฐํธ๋ฅผ ์ฌ์ฉํด, set()& set() ํํ๋ก๋ ์ฌ์ฉํ ์ ์๋ค. |
3. set ์๋ฃํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํ๋ค. |
list ์๋ฃํ์์ append()์ extend() ์ฐจ์ด append๋ ๋จ์ํ ๋งจ ๋ค์ ํด๋น ์์(1๊ฐ)๋ฅผ ์ถ๊ฐํ์ง๋ง, extend๋ iterableํ ๋ชจ๋ ์์๋ฅผ ์ถ๊ฐํ๋ค. extend๋ ๋ฆฌ์คํธ๋ฅผ ๋๋ฆฌ๋ ๋๋(ํ์ฅ์ ์๋ฏธ) |
๐ซcode )
from itertools import combinations as combi
def solution(relation):
row = len(relation)
col = len(relation[0])
# ์ ์ฒด ์กฐํฉ
candidates = []
for i in range(1, col + 1):
candidates.extend(combi(range(col), i))
# ์ ์ผ์ฑ
unique = []
for candi in candidates:
tmp = [tuple([item[i] for i in candi]) for item in relation]
if len(set(tmp)) == row:
unique.append(candi)
# ์ต์์ฑ
answer = set(unique)
for i in range(len(unique)):
for j in range(i + 1, len(unique)):
if len(unique[i]) == len(set(unique[i]) & set(unique[j])):
answer.discard(unique[j])
return len(answer)
๐ description )
๋ฌธ์ ์ถ์ฒ : programmers.co.kr/learn/courses/30/lessons/42890?language=python3
๋ฌธ์ ์ค๋ช ํ๋ณดํคํ๋ ์ฆ๋ํ๊ต ์ปดํจํฐ๊ณตํ๊ณผ ์กฐ๊ต์ธ ์ ์ด์ง๋ ๋ค์ค ํ๊ณผ์ฅ๋์ ์ง์๋ก, ํ์๋ค์ ์ธ์ ์ฌํญ์ ์ ๋ฆฌํ๋ ์ ๋ฌด๋ฅผ ๋ด๋นํ๊ฒ ๋์๋ค. ๊ทธ์ ํ๋ถ ์์ ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ์ ๋์ด๋ ค, ๋ชจ๋ ์ธ์ ์ฌํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฃ๊ธฐ๋ก ํ์๊ณ , ์ด๋ฅผ ์ํด ์ ๋ฆฌ๋ฅผ ํ๋ ์ค์ ํ๋ณดํค(Candidate Key)์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๊ฒ ๋์๋ค. ํ๋ณดํค์ ๋ํ ๋ด์ฉ์ด ์ ๊ธฐ์ต๋์ง ์๋ ์ ์ด์ง๋, ์ ํํ ๋ด์ฉ์ ํ์ ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ จ ์์ ์ ํ์ธํ์ฌ ์๋์ ๊ฐ์ ๋ด์ฉ์ ํ์ธํ์๋ค.
์ ์ด์ง๋ฅผ ์ํด, ์๋์ ๊ฐ์ ํ์๋ค์ ์ธ์ ์ฌํญ์ด ์ฃผ์ด์ก์ ๋, ํ๋ณด ํค์ ์ต๋ ๊ฐ์๋ฅผ ๊ตฌํ๋ผ. ์์ ์๋ฅผ ์ค๋ช
ํ๋ฉด, ํ์์ ์ธ์ ์ฌํญ ๋ฆด๋ ์ด์
์์ ๋ชจ๋ ํ์์ ๊ฐ์ ์ ์ผํ ํ๋ฒ์ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์ ํ๋ฒ์ ๋ฆด๋ ์ด์
์ ํ๋ณด ํค๊ฐ ๋ ์ ์๋ค. ๋ฆด๋ ์ด์
์ ๋ํ๋ด๋ ๋ฌธ์์ด ๋ฐฐ์ด relation์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ด ๋ฆด๋ ์ด์
์์ ํ๋ณด ํค์ ๊ฐ์๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํ๋ผ. ์ ํ์ฌํญ
์
์ถ๋ ฅ ์
์
์ถ๋ ฅ ์ #1 |