Skip to content

Commit 3f771a2

Browse files
committed
2 parents 74a86cc + 35bce3e commit 3f771a2

File tree

7 files changed

+261
-47
lines changed

7 files changed

+261
-47
lines changed
Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,38 @@
1-
from itertools import permutations
1+
from math import factorial
22

33
def solution(n, k):
4-
return list(permutations(range(1, n+1)))[k-1]
4+
answer = []
5+
nums = list(range(1, n+1))
6+
7+
while(n != 0):
8+
n -= 1
9+
temp = factorial(n)
10+
index = (k-1) // temp
11+
k = k % temp
12+
answer.append(nums.pop(index))
13+
14+
return answer
515

616
'''
7-
왜 3레벨인지 알게되었습니다
8-
효율성 문제였군요
9-
1017
정확성 테스트
11-
테스트 1 〉 통과 (0.10ms, 10.3MB)
12-
테스트 2 〉 통과 (66.45ms, 52.1MB)
13-
테스트 3 〉 통과 (66.84ms, 52.1MB)
14-
테스트 4 〉 통과 (0.10ms, 10.3MB)
15-
테스트 5 〉 통과 (0.02ms, 10.2MB)
18+
테스트 1 〉 통과 (0.01ms, 10.2MB)
19+
테스트 2 〉 통과 (0.01ms, 10.2MB)
20+
테스트 3 〉 통과 (0.01ms, 10.3MB)
21+
테스트 4 〉 통과 (0.01ms, 10.2MB)
22+
테스트 5 〉 통과 (0.01ms, 10.4MB)
1623
테스트 6 〉 통과 (0.01ms, 10.2MB)
17-
테스트 7 〉 통과 (6.64ms, 14.8MB)
18-
테스트 8 〉 통과 (0.11ms, 10.3MB)
19-
테스트 9 〉 통과 (0.11ms, 10.2MB)
20-
테스트 10 〉 통과 (732.18ms, 495MB)
21-
테스트 11 〉 통과 (678.40ms, 495MB)
22-
테스트 12 〉 실패 (시간 초과)
23-
테스트 13 〉 실패 (시간 초과)
24-
테스트 14 〉 통과 (0.11ms, 10.3MB)
24+
테스트 7 〉 통과 (0.01ms, 10.2MB)
25+
테스트 8 〉 통과 (0.01ms, 10.3MB)
26+
테스트 9 〉 통과 (0.01ms, 10.2MB)
27+
테스트 10 〉 통과 (0.01ms, 10.2MB)
28+
테스트 11 〉 통과 (0.01ms, 10.2MB)
29+
테스트 12 〉 통과 (0.01ms, 10.2MB)
30+
테스트 13 〉 통과 (0.01ms, 10.1MB)
31+
테스트 14 〉 통과 (0.01ms, 10.2MB)
2532
효율성 테스트
26-
테스트 1 〉 실패 (시간 초과)
27-
테스트 2 〉 실패 (시간 초과)
28-
테스트 3 〉 실패 (시간 초과)
29-
테스트 4 〉 실패 (시간 초과)
30-
테스트 5 〉 실패 (시간 초과)
33+
테스트 1 〉 통과 (0.02ms, 10.2MB)
34+
테스트 2 〉 통과 (0.03ms, 10.2MB)
35+
테스트 3 〉 통과 (0.01ms, 10.1MB)
36+
테스트 4 〉 통과 (0.02ms, 10.2MB)
37+
테스트 5 〉 통과 (0.03ms, 10.2MB)
3138
'''
Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
1+
from math import factorial as fac
12
def solution(n, k):
2-
def fac(num):
3-
result = 1
4-
for i in range(1, num+1):
5-
result*=i
6-
return result
7-
83
answer=[]
94
numbers = [i for i in range(1, n+1)]
105

@@ -19,25 +14,24 @@ def fac(num):
1914

2015
'''
2116
정확성 테스트
22-
테스트 1 〉 통과 (0.02ms, 10.3MB)
23-
테스트 2 〉 통과 (0.02ms, 10.3MB)
24-
테스트 3 〉 통과 (0.02ms, 10.2MB)
25-
테스트 4 〉 통과 (0.01ms, 10.2MB)
26-
테스트 5 〉 통과 (0.01ms, 10.3MB)
27-
테스트 6 〉 통과 (0.02ms, 10.3MB)
28-
테스트 7 〉 통과 (0.02ms, 10.3MB)
17+
테스트 1 〉 통과 (0.01ms, 10.2MB)
18+
테스트 2 〉 통과 (0.01ms, 10.3MB)
19+
테스트 3 〉 통과 (0.01ms, 10.3MB)
20+
테스트 4 〉 통과 (0.01ms, 10.3MB)
21+
테스트 5 〉 통과 (0.01ms, 10.2MB)
22+
테스트 6 〉 통과 (0.01ms, 10.2MB)
23+
테스트 7 〉 통과 (0.01ms, 10.2MB)
2924
테스트 8 〉 통과 (0.01ms, 10.3MB)
3025
테스트 9 〉 통과 (0.01ms, 10.2MB)
31-
테스트 10 〉 통과 (0.02ms, 10.3MB)
32-
테스트 11 〉 통과 (0.02ms, 10.2MB)
33-
테스트 12 〉 통과 (0.02ms, 10.3MB)
34-
테스트 13 〉 통과 (0.03ms, 10.2MB)
35-
테스트 14 〉 통과 (0.02ms, 10.2MB)
36-
26+
테스트 10 〉 통과 (0.01ms, 10.2MB)
27+
테스트 11 〉 통과 (0.01ms, 10.2MB)
28+
테스트 12 〉 통과 (0.01ms, 10.3MB)
29+
테스트 13 〉 통과 (0.01ms, 10.2MB)
30+
테스트 14 〉 통과 (0.01ms, 10.2MB)
3731
효율성 테스트
38-
테스트 1 〉 통과 (0.05ms, 10.1MB)
39-
테스트 2 〉 실패 (시간 초과)
40-
테스트 3 〉 통과 (0.04ms, 10.2MB)
41-
테스트 4 〉 통과 (0.05ms, 10.2MB)
42-
테스트 5 〉 통과 (0.05ms, 10.2MB)
32+
테스트 1 〉 통과 (0.02ms, 10.2MB)
33+
테스트 2 〉 통과 (0.03ms, 10.2MB)
34+
테스트 3 〉 통과 (0.02ms, 10.2MB)
35+
테스트 4 〉 통과 (0.02ms, 10.2MB)
36+
테스트 5 〉 통과 (0.02ms, 10.2MB)
4337
'''

[211202] 줄 서는 방법/bsw.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
def factorial(n):
3+
result = 1
4+
5+
if n == 1:
6+
return n
7+
for i in range(2, n+1):
8+
result *= i
9+
10+
return result
11+
12+
def solution(n, k):
13+
answer = []
14+
15+
nums = [i for i in range(1, 20 +1)]
16+
17+
while n:
18+
slice = factorial(n) // n
19+
now = (k-1) // slice
20+
answer.append(nums.pop(now))
21+
22+
n-=1
23+
k %= slice
24+
if k == 0:
25+
k = slice
26+
27+
return answer
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
def solution(places):
2+
def manhattan(T1, T2):
3+
return abs(T1[0]-T2[0]) + abs(T1[1]-T2[1])
4+
5+
def find_P(P):
6+
if p.find('P')!=-1:
7+
for i, s in enumerate(p):
8+
if s == 'P': P.append ([row,i])
9+
10+
answer = []
11+
for place in places:
12+
P=[] # 사람이 앉아있는 좌표
13+
flag = 0
14+
15+
for row, p in enumerate(place):
16+
find_P(P)
17+
18+
for i, p1 in enumerate(P):
19+
for p2 in P[i+1:]:
20+
dist = manhattan(p1,p2) # 두 사람의 맨해튼 거리
21+
if dist < 2: # 옆에 앉아있을 경우
22+
answer.append(0)
23+
flag = 1
24+
break
25+
elif dist == 2:
26+
if (p1[0]==p2[0])or(p1[1]==p2[1]): # 일직선으로 앉아있는 경우
27+
x, y = [(p1[0]+p2[0])//2, (p1[1]+p2[1])//2]
28+
if place[x][y] != 'X': # 가운데 좌석이 파티션이 아닐 경우
29+
answer.append(0)
30+
flag = 1
31+
break
32+
else: # 대각선으로 앉아있는 경우
33+
if place[p1[0]][p2[1]] == 'O' or place[p2[0]][p1[1]] == 'O': # 사이에 빈 테이블이 있을 경우
34+
answer.append(0)
35+
flag = 1
36+
break
37+
if flag: break
38+
if not flag:
39+
answer.append(1)
40+
return answer
41+
42+
'''
43+
정확성 테스트
44+
테스트 1 〉 통과 (0.08ms, 10.3MB)
45+
테스트 2 〉 통과 (0.03ms, 10.3MB)
46+
테스트 3 〉 통과 (0.03ms, 10.3MB)
47+
테스트 4 〉 통과 (0.03ms, 10.3MB)
48+
테스트 5 〉 통과 (0.03ms, 10.3MB)
49+
테스트 6 〉 통과 (0.03ms, 10.3MB)
50+
테스트 7 〉 통과 (0.03ms, 10.2MB)
51+
테스트 8 〉 통과 (0.05ms, 10.4MB)
52+
테스트 9 〉 통과 (0.03ms, 10.3MB)
53+
테스트 10 〉 통과 (0.03ms, 10.4MB)
54+
테스트 11 〉 통과 (0.03ms, 10.4MB)
55+
테스트 12 〉 통과 (0.03ms, 10.3MB)
56+
테스트 13 〉 통과 (0.03ms, 10.4MB)
57+
테스트 14 〉 통과 (0.02ms, 10.3MB)
58+
테스트 15 〉 통과 (0.02ms, 10.3MB)
59+
테스트 16 〉 통과 (0.03ms, 10.3MB)
60+
테스트 17 〉 통과 (0.03ms, 10.3MB)
61+
테스트 18 〉 통과 (0.03ms, 10.3MB)
62+
테스트 19 〉 통과 (0.03ms, 10.3MB)
63+
테스트 20 〉 통과 (0.04ms, 10.3MB)
64+
테스트 21 〉 통과 (0.04ms, 10.3MB)
65+
테스트 22 〉 통과 (0.03ms, 10.3MB)
66+
테스트 23 〉 통과 (0.01ms, 10.3MB)
67+
테스트 24 〉 통과 (0.04ms, 10.3MB)
68+
테스트 25 〉 통과 (0.02ms, 10.3MB)
69+
테스트 26 〉 통과 (0.02ms, 10.3MB)
70+
테스트 27 〉 통과 (0.03ms, 10.3MB)
71+
테스트 28 〉 통과 (0.03ms, 10.3MB)
72+
테스트 29 〉 통과 (0.02ms, 10.3MB)
73+
테스트 30 〉 통과 (0.03ms, 10.3MB)
74+
'''
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
2+
def solution(places):
3+
answer = []
4+
5+
for place in places:
6+
7+
# 2x2 박스 탐색
8+
# p가 2개일때
9+
geori = 1
10+
for r in range(4):
11+
for c in range(4):
12+
if not geori:
13+
break
14+
row1 = [place[r][c], place[r][c+1]]
15+
row2 = [place[r+1][c], place[r+1][c+1]]
16+
17+
# P가 좌우로 붙어있는 경우
18+
if row1.count('P') == 2 or row2.count('P') == 2:
19+
geori = 0
20+
21+
elif row1.count('P') + row2.count('P') == 2:
22+
# P가 상하로 붙어있는 경우
23+
if row1.index('P') == row2.index('P'):
24+
geori = 0
25+
# P가 대각선으로 위치하는 경우
26+
if row1.count('O') or row2.count('O'):
27+
geori = 0
28+
29+
# P가 3개 일때
30+
# 전치행렬 사용하여 가로로 POP 세로로 POP 한번에 탐색
31+
place2 = [''.join(x) for x in zip(*place)] # place의 전치행렬
32+
for r in range(5):
33+
for c in range(3):
34+
if not geori:
35+
break
36+
row1 = place[r][c:c+3] # 가로 POP
37+
row2 = place2[r][c:c+3] # 세로 POP
38+
39+
if row1 == 'POP' or row2 == 'POP':
40+
geori = 0
41+
42+
answer.append(geori)
43+
44+
return answer
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
def solution(places):
2+
answer = []
3+
d = [(0, 1), (0, -1), (1, 0), (-1, 0)]
4+
for n, place in enumerate(places):
5+
for row in range(5):
6+
if len(answer) == n + 1:
7+
break
8+
for col in range(5):
9+
# 현재 위치가 O면 상하좌우에 P가 2개 이상이면 안됨
10+
if place[row][col] == 'O':
11+
cnt = 0
12+
for d_row, d_col in d:
13+
nxt_row, nxt_col = row + d_row, col + d_col
14+
if nxt_row < 0 or nxt_row >= 5 or nxt_col < 0 or nxt_col >= 5:
15+
continue
16+
if place[nxt_row][nxt_col] == 'P':
17+
cnt += 1
18+
if cnt > 1:
19+
answer.append(0)
20+
break
21+
# 현재 위치가 p면 상하좌우에 p가 없어야함
22+
if place[row][col] == 'P':
23+
flag = False
24+
for d_row, d_col in d:
25+
nxt_row, nxt_col = row + d_row, col + d_col
26+
if nxt_row < 0 or nxt_row >= 5 or nxt_col < 0 or nxt_col >= 5:
27+
continue
28+
if place[nxt_row][nxt_col] == 'P':
29+
answer.append(0)
30+
flag = True
31+
break
32+
if flag:
33+
break
34+
else:
35+
answer.append(1)
36+
37+
return answer
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import difflib
2+
3+
def solution(begin, target, words):
4+
answer = []
5+
visited = [0*i for i in range(len(words))]
6+
7+
def dfs(now,visited):
8+
for i, w in enumerate(words):
9+
diff = d.compare(now, w)
10+
if len(list(diff)) - len(now) == 1 and visited[i]==0:
11+
visited[i] = 1
12+
if w == target:
13+
answer.append(visited.count(1))
14+
else:
15+
dfs(w, visited)
16+
visited[i] = 0
17+
18+
d = difflib.Differ()
19+
dfs(begin, visited)
20+
if not answer:
21+
return 0
22+
return min(answer)
23+
24+
'''
25+
정확성 테스트
26+
테스트 1 〉 통과 (0.12ms, 10.4MB)
27+
테스트 2 〉 통과 (10.93ms, 10.4MB)
28+
테스트 3 〉 통과 (28.37ms, 10.4MB)
29+
테스트 4 〉 통과 (0.29ms, 10.4MB)
30+
테스트 5 〉 통과 (0.05ms, 10.5MB)
31+
'''

0 commit comments

Comments
 (0)