Skip to content

Commit d731281

Browse files
committed
add 후보키/hans.py
1 parent e466a16 commit d731281

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed

[211217] 후보키/hans.py

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
2+
from itertools import combinations
3+
def solution(relation):
4+
row = len(relation)
5+
col = len(relation[0])
6+
7+
comb = []
8+
for c in range(col):
9+
comb.extend(combinations(range(col), c+1)) # 모든 조합
10+
11+
unique = []
12+
for com in comb:
13+
tmp2 = []
14+
for i in range(row): # 유일성 검사
15+
tmp = []
16+
for c in com:
17+
tmp.append(relation[i][c])
18+
if tmp not in tmp2:
19+
tmp2.append(tmp)
20+
else:
21+
break
22+
else: # 유일성 통과, 최소성 거사
23+
for i in unique:
24+
if set(i).issubset(set(com)):
25+
break
26+
else:
27+
unique.append(com) # 최소성 통과
28+
29+
return len(unique)
30+
31+
'''
32+
테스트 1 〉 통과 (0.04ms, 27.7MB)
33+
테스트 2 〉 통과 (0.06ms, 27.8MB)
34+
테스트 3 〉 통과 (0.06ms, 27.9MB)
35+
테스트 4 〉 통과 (0.03ms, 27.7MB)
36+
테스트 5 〉 통과 (0.03ms, 27.9MB)
37+
테스트 6 〉 통과 (0.01ms, 27.9MB)
38+
테스트 7 〉 통과 (0.02ms, 27.8MB)
39+
테스트 8 〉 통과 (0.01ms, 27.8MB)
40+
테스트 9 〉 통과 (0.08ms, 27.8MB)
41+
테스트 10 〉 통과 (0.09ms, 27.9MB)
42+
테스트 11 〉 통과 (0.15ms, 27.9MB)
43+
테스트 12 〉 통과 (0.75ms, 27.9MB)
44+
테스트 13 〉 통과 (0.25ms, 27.9MB)
45+
테스트 14 〉 통과 (0.06ms, 27.7MB)
46+
테스트 15 〉 통과 (0.03ms, 27.9MB)
47+
테스트 16 〉 통과 (0.04ms, 27.8MB)
48+
테스트 17 〉 통과 (0.04ms, 27.9MB)
49+
테스트 18 〉 통과 (3.40ms, 27.8MB)
50+
테스트 19 〉 통과 (1.54ms, 28MB)
51+
테스트 20 〉 통과 (3.14ms, 27.9MB)
52+
테스트 21 〉 통과 (0.68ms, 27.9MB)
53+
테스트 22 〉 통과 (0.73ms, 27.8MB)
54+
테스트 23 〉 통과 (0.05ms, 27.8MB)
55+
테스트 24 〉 통과 (1.35ms, 28MB)
56+
테스트 25 〉 통과 (2.93ms, 27.9MB)
57+
테스트 26 〉 통과 (1.65ms, 27.8MB)
58+
테스트 27 〉 통과 (0.27ms, 27.7MB)
59+
테스트 28 〉 통과 (0.24ms, 27.9MB)
60+
61+
'''

hans.py

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import math
2+
from itertools import permutations
3+
def solution(n, k):
4+
answer = []
5+
# [1234][1243][1324][1342][1423][1432] 6
6+
# [2134][2143][2314][2341][2413][2431] 12
7+
# [3124][3142][3214][3241][3412][3421] 18 6 2 17 5 1
8+
# [4123][4132][4213][4231][4312][4321] 24
9+
f = math.factorial(n)
10+
lst = [i+1 for i in range(n)]
11+
lst_r = [i+1 for i in reversed(range(n))]
12+
i=0
13+
# print(lst)
14+
for v in lst_r:
15+
f = f//v # 6 -> 2 -> 1 -> 1
16+
if k in [0,1]:
17+
i = k-1
18+
k-=1
19+
else:
20+
if k%f==0:
21+
i = (k//f)-1
22+
else:
23+
i = k//f # 02 -> 02 -> 00 -> 00
24+
k -= i*f # 18 -> 06 -> 02
25+
answer.append(lst[i])
26+
del lst[i]
27+
return answer
28+
29+
'''
30+
테스트 1 〉 통과 (0.01ms, 10.2MB)
31+
테스트 2 〉 통과 (0.01ms, 10.3MB)
32+
테스트 3 〉 통과 (0.01ms, 10.2MB)
33+
테스트 4 〉 통과 (0.01ms, 10.3MB)
34+
테스트 5 〉 통과 (0.01ms, 10.2MB)
35+
테스트 6 〉 통과 (0.01ms, 10.3MB)
36+
테스트 7 〉 통과 (0.01ms, 10.3MB)
37+
테스트 8 〉 통과 (0.01ms, 10.2MB)
38+
테스트 9 〉 통과 (0.01ms, 10.2MB)
39+
테스트 10 〉 실패 (런타임 에러)
40+
테스트 11 〉 통과 (0.01ms, 10.2MB)
41+
테스트 12 〉 통과 (0.01ms, 10.3MB)
42+
테스트 13 〉 통과 (0.01ms, 10.2MB)
43+
테스트 14 〉 통과 (0.01ms, 10.2MB)
44+
효율성 테스트
45+
테스트 1 〉 통과 (0.02ms, 10.2MB)
46+
테스트 2 〉 통과 (0.02ms, 10.2MB)
47+
테스트 3 〉 통과 (0.02ms, 10.2MB)
48+
테스트 4 〉 통과 (0.02ms, 10.1MB)
49+
테스트 5 〉 실패 (런타임 에러)
50+
51+
'''

0 commit comments

Comments
 (0)