Skip to content

Commit 02ac731

Browse files
authored
Kcm bojhw (#108)
* 찬민 백준숙제 * '8/27백준숙제' * 'message' * '2931'
1 parent 2482c09 commit 02ac731

File tree

15 files changed

+641
-10
lines changed

15 files changed

+641
-10
lines changed

‎cmkim/2021 라인공채/test.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
daily = [0 for _ in range(26)]
2+
print(daily)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
def solution(student, k):
2+
answer = 0
3+
4+
size = len(student)
5+
a, b = 0, 1
6+
7+
while a < size and b < size+1:
8+
num = 0 # 재학생 수
9+
flag = 0
10+
left = 0
11+
for i in range(a, b):
12+
if student[i]:
13+
num += 1
14+
flag = 1
15+
if not flag:
16+
left += 1
17+
18+
if num == k:
19+
answer += (left + 1)
20+
b += 1
21+
22+
23+
elif num < k:
24+
b += 1
25+
elif num > k:
26+
a += 1
27+
28+
return answer
29+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
'''
2+
매일 k번이상
3+
총합 2nk이상
4+
'''
5+
6+
def solution(research, n, k):
7+
answer = ''
8+
arr = [[0]*26 for _ in range(len(research))]
9+
daily = [0 for _ in range(26)]
10+
total = [0 for _ in range(26)]
11+
succesion = [0 for _ in range(26)]
12+
13+
for i in range(len(research)):
14+
for j in research[i]:
15+
arr[i][ord(j)-97] += 1
16+
17+
# for i in range(len(research)):
18+
# print(arr[i])
19+
20+
for i in range(26):
21+
22+
for a in range(len(research)-n+1):
23+
day = 0
24+
temp = 0
25+
for b in range(a, a+n):
26+
if arr[b][i] >= k:
27+
day += 1
28+
temp += arr[b][i]
29+
else:
30+
day = 0
31+
temp = 0
32+
33+
if day >= n and temp >= 2*n*k: #이슈 검색어
34+
succesion[i] += 1
35+
#print(succesion)
36+
result = -1
37+
for i in range(26):
38+
if succesion[i] == max(succesion) and max(succesion)>0:
39+
result = i
40+
break
41+
#print(result)
42+
if result > -1:
43+
answer += chr(result+97)
44+
else:
45+
answer += 'None'
46+
47+
return answer
48+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# 무적권 재귀문제, 소인수분해
2+
def factorization(x):
3+
d = 2
4+
result = []
5+
while d <= x:
6+
if x % d == 0:
7+
result.append(d)
8+
x = x / d
9+
else:
10+
d = d + 1
11+
return result
12+
13+
14+
def recur(arr, divide):
15+
result = []
16+
length = len(arr) # 부분배열의 갯수
17+
18+
19+
20+
print('arr = ', arr)
21+
#print('length = ', length)
22+
for i in range(length):
23+
node = [[] for _ in range(divide)]
24+
for j in range(len(arr[i])):
25+
index = j % divide
26+
node[index].append(arr[i][j])
27+
28+
for k in range(divide):
29+
result.append(node[k])
30+
31+
32+
print('result = ', result)
33+
return result
34+
35+
36+
def solution(n):
37+
answer = []
38+
p = [] # 소인수분해 결과
39+
p = factorization(n)
40+
arr = list(range(1, n + 1))
41+
for i in range(len(p)):
42+
if i == 0:
43+
arr = recur([arr], p[i])
44+
else:
45+
arr = recur(arr, p[i])
46+
for i in range(n):
47+
answer.append(arr[i][0])
48+
49+
return answer
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
def solution(id_list, report, k):
2+
answer = []
3+
size = len(id_list)
4+
arr = [[0] * size for _ in range(size)]
5+
result = []
6+
dic = {string: i for i, string in enumerate(id_list)}
7+
#print(dic)
8+
9+
for i in range(len(report)):
10+
str = report[i].split()
11+
a, b = str[0], str[1]
12+
# print(a, b)
13+
arr[dic[a]][dic[b]] += 1 # a가 b를 신고한것
14+
15+
# for i in range(size):
16+
# print(arr[i])
17+
18+
for i in range(size):
19+
sum = 0
20+
for j in range(size):
21+
if arr[j][i]:
22+
sum += 1
23+
24+
if sum >= k:
25+
result.append(1)
26+
else:
27+
result.append(0)
28+
29+
# print('result = ',result)
30+
31+
for i in range(size):
32+
sum = 0
33+
for j in range(size):
34+
if arr[i][j] and result[j]:
35+
sum += 1
36+
answer.append(sum)
37+
38+
return answer
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import string
2+
import math
3+
tmp = string.digits
4+
5+
6+
def convert(num, base):
7+
if base == 10:
8+
return num
9+
q, r = divmod(num, base)
10+
if q == 0:
11+
return tmp[r]
12+
else:
13+
return convert(q, base) + tmp[r]
14+
15+
16+
def is_prime(x):
17+
if x == 1:
18+
return False
19+
for i in range(2, int(math.sqrt(x))+1):
20+
if x % i == 0:
21+
return False
22+
23+
return True
24+
25+
26+
def compress(x):
27+
result = ''
28+
flag = 0
29+
right = 0
30+
# print(type(x))
31+
for i in range(len(x) - 1, -1, -1):
32+
# print('i = ',i)
33+
if x[i] == '0':
34+
right += 1
35+
else:
36+
break
37+
# print('right = ', right)
38+
if right:
39+
x = x[0:-(right)]
40+
# print('x = ',x)
41+
for i in range(len(x)):
42+
if x[i] != '0':
43+
result += x[i]
44+
flag = 0
45+
elif flag == 0:
46+
result += '0'
47+
flag = 1
48+
elif flag == 1:
49+
continue
50+
# print(result)
51+
return result
52+
53+
54+
def solution(n, k):
55+
answer = -1
56+
num = convert(n, k)
57+
# print(num)
58+
arr = compress(str(num)) # 0압축하기, 오른쪽 0 제거
59+
# print(arr)
60+
# print(type(arr))
61+
arr = arr.split('0') # 0제거한 수
62+
prime = []
63+
print(arr)
64+
for i in range(len(arr)): # 0제거한 수에서 소수뽑아내��
65+
# print(int(arr[i]))
66+
if is_prime(int(arr[i])):
67+
prime.append(int(arr[i]))
68+
# print(prime)
69+
70+
answer = len(prime)
71+
72+
return answer
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import math
2+
def solution(fees, records):
3+
answer = []
4+
5+
arr = [['']*3 for _ in range(len(records))]
6+
cars = ''
7+
for i in range(len(records)):
8+
t, n, c = records[i].split() #시간, 차 번호, 상태
9+
arr[i][0] += t
10+
arr[i][1] += n
11+
arr[i][2] += c
12+
if n not in cars:
13+
cars += n
14+
cars += ' '
15+
16+
# for i in range(len(records)):
17+
# print(arr[i])
18+
19+
# print(cars)
20+
car = cars.split()
21+
#print(car)
22+
car.sort()# 자동차번호
23+
#print(car)
24+
time = [0 for _ in range(len(car))] # 이용시간 저장
25+
money = [0 for _ in range(len(car))]
26+
for n in range(len(car)):#번호가 작은 차부터
27+
flag = 0 # 0=들어오기전, 1= 들어온상태
28+
s_time, e_time = 0, 0 #입차, 출차시간
29+
for i in range(len(records)):
30+
if car[n] == arr[i][1]:
31+
if flag == 1:
32+
h, m = arr[i][0].split(':')
33+
e_time = int(h) * 60 + int(m)
34+
time[n] += e_time - s_time
35+
flag = 0
36+
continue
37+
if flag == 0:
38+
h, m = arr[i][0].split(':')
39+
s_time = int(h)*60 + int(m)
40+
#print(h, m)
41+
flag = 1
42+
if flag == 1:
43+
e_time = 1439
44+
time[n] += e_time - s_time
45+
46+
if time[n] >= fees[0]:
47+
money[n] += fees[1]
48+
time[n] -= fees[0]
49+
money[n] += int(math.ceil(time[n] / fees[2]) *fees[3])
50+
else:
51+
money[n] += fees[1]
52+
53+
print(money)
54+
55+
56+
return money
57+
58+
#solution([180, 5000, 10, 600], ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"])
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
def solution(n, info):
2+
answer = []
3+
return answer
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# dp랑 플로이드 워셜?
2+
# INF = 1e9
3+
def floyd(arr, dp1, dp2, info):
4+
5+
size = len(info)
6+
v1 = [[0] * size for _ in range(size)]
7+
v2 = [[0] * size for _ in range(size)]
8+
for i in range(size):
9+
for j in range(size):
10+
if arr[i][j]: #j가 자식노드고
11+
if info[j]: #j가 늑대면
12+
dp2[i][j] += 1
13+
v2[i][j] = 1
14+
# if dp1[i][j] <= dp2[i][j]:
15+
# dp1[i][j] = 0
16+
else:
17+
dp1[i][j] += 1
18+
v1[i][j] = 1
19+
for k in range(size):
20+
for i in range(size):
21+
for j in range(size):
22+
if arr[i][k] and arr[k][j] and not v1[i][k] and not v2[k][j]:
23+
dp1[i][j] = dp1[i][k] + dp1[k][j] + dp1[i][j]
24+
dp2[i][j] = dp2[i][k] + dp2[k][j] + dp2[i][j]
25+
for i in range(size):
26+
print(dp1[i])
27+
print('=====================')
28+
for i in range(size):
29+
print(dp2[i])
30+
print('=====================')
31+
32+
dp3 = [[0] * size for _ in range(size)]
33+
for i in range(size):
34+
for j in range(size):
35+
dp3[i][j] = dp1[i][j] - dp2[i][i]
36+
for i in range(size):
37+
print(dp3[i])
38+
sum = 0
39+
for i in range(size):
40+
for j in range(size):
41+
if dp3[i][j] > 0:
42+
sum += dp3[i][j]
43+
return sum
44+
def solution(info, edges):
45+
answer = 0
46+
size = len(info)
47+
# print(type(size))
48+
arr = [[0] * size for _ in range(size)]
49+
dp1 = [[0] * size for _ in range(size)] #양, 늑대
50+
dp2 = [[0] * size for _ in range(size)]
51+
#dp1[0][0] = 1
52+
#print(dp)
53+
54+
55+
# for i in range(size):
56+
# arr[i][i] = INF
57+
# print(arr[i])
58+
for i in range(len(edges)):
59+
a, b = edges[i][0], edges[i][1]
60+
# print('a, b = ',a, b)
61+
arr[a][b] = 1 # a의 자식은 b다
62+
arr[b][a] = 1
63+
# for i in range(size):
64+
# print(arr[i])
65+
result = floyd(arr, dp1, dp2, info)
66+
67+
return result
68+
69+
#solution([0,0,1,1,1,0,1,0,1,0,1,1], [[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]])

0 commit comments

Comments
 (0)