Skip to content

Kcm bojhw #108

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Sep 22, 2021
2 changes: 2 additions & 0 deletions cmkim/2021 라인공채/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
daily = [0 for _ in range(26)]
print(daily)
29 changes: 29 additions & 0 deletions cmkim/2021 라인공채/프로그래밍1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
def solution(student, k):
answer = 0

size = len(student)
a, b = 0, 1

while a < size and b < size+1:
num = 0 # 재학생 ��
flag = 0
left = 0
for i in range(a, b):
if student[i]:
num += 1
flag = 1
if not flag:
left += 1

if num == k:
answer += (left + 1)
b += 1


elif num < k:
b += 1
elif num > k:
a += 1

return answer

48 changes: 48 additions & 0 deletions cmkim/2021 라인공채/프로그래밍2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
'''
매일 k번이상
총합 2nk이상
'''

def solution(research, n, k):
answer = ''
arr = [[0]*26 for _ in range(len(research))]
daily = [0 for _ in range(26)]
total = [0 for _ in range(26)]
succesion = [0 for _ in range(26)]

for i in range(len(research)):
for j in research[i]:
arr[i][ord(j)-97] += 1

# for i in range(len(research)):
# print(arr[i])

for i in range(26):

for a in range(len(research)-n+1):
day = 0
temp = 0
for b in range(a, a+n):
if arr[b][i] >= k:
day += 1
temp += arr[b][i]
else:
day = 0
temp = 0

if day >= n and temp >= 2*n*k: #이슈 검색어
succesion[i] += 1
#print(succesion)
result = -1
for i in range(26):
if succesion[i] == max(succesion) and max(succesion)>0:
result = i
break
#print(result)
if result > -1:
answer += chr(result+97)
else:
answer += 'None'

return answer

49 changes: 49 additions & 0 deletions cmkim/2021 라인공채/프로그래밍4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# 무적권 재귀문제, 소인수분해
def factorization(x):
d = 2
result = []
while d <= x:
if x % d == 0:
result.append(d)
x = x / d
else:
d = d + 1
return result


def recur(arr, divide):
result = []
length = len(arr) # 부분배열의 갯수



print('arr = ', arr)
#print('length = ', length)
for i in range(length):
node = [[] for _ in range(divide)]
for j in range(len(arr[i])):
index = j % divide
node[index].append(arr[i][j])

for k in range(divide):
result.append(node[k])


print('result = ', result)
return result


def solution(n):
answer = []
p = [] # 소인수분해 결과
p = factorization(n)
arr = list(range(1, n + 1))
for i in range(len(p)):
if i == 0:
arr = recur([arr], p[i])
else:
arr = recur(arr, p[i])
for i in range(n):
answer.append(arr[i][0])

return answer
38 changes: 38 additions & 0 deletions cmkim/2021 카카오 BLIND 예선/프로그래밍1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
def solution(id_list, report, k):
answer = []
size = len(id_list)
arr = [[0] * size for _ in range(size)]
result = []
dic = {string: i for i, string in enumerate(id_list)}
#print(dic)

for i in range(len(report)):
str = report[i].split()
a, b = str[0], str[1]
# print(a, b)
arr[dic[a]][dic[b]] += 1 # a가 b를 신고한것

# for i in range(size):
# print(arr[i])

for i in range(size):
sum = 0
for j in range(size):
if arr[j][i]:
sum += 1

if sum >= k:
result.append(1)
else:
result.append(0)

# print('result = ',result)

for i in range(size):
sum = 0
for j in range(size):
if arr[i][j] and result[j]:
sum += 1
answer.append(sum)

return answer
72 changes: 72 additions & 0 deletions cmkim/2021 카카오 BLIND 예선/프로그래밍2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import string
import math
tmp = string.digits


def convert(num, base):
if base == 10:
return num
q, r = divmod(num, base)
if q == 0:
return tmp[r]
else:
return convert(q, base) + tmp[r]


def is_prime(x):
if x == 1:
return False
for i in range(2, int(math.sqrt(x))+1):
if x % i == 0:
return False

return True


def compress(x):
result = ''
flag = 0
right = 0
# print(type(x))
for i in range(len(x) - 1, -1, -1):
# print('i = ',i)
if x[i] == '0':
right += 1
else:
break
# print('right = ', right)
if right:
x = x[0:-(right)]
# print('x = ',x)
for i in range(len(x)):
if x[i] != '0':
result += x[i]
flag = 0
elif flag == 0:
result += '0'
flag = 1
elif flag == 1:
continue
# print(result)
return result


def solution(n, k):
answer = -1
num = convert(n, k)
# print(num)
arr = compress(str(num)) # 0압축하기, 오른쪽 0 제거
# print(arr)
# print(type(arr))
arr = arr.split('0') # 0제거한 수
prime = []
print(arr)
for i in range(len(arr)): # 0제거한 수에서 소수뽑아내기
# print(int(arr[i]))
if is_prime(int(arr[i])):
prime.append(int(arr[i]))
# print(prime)

answer = len(prime)

return answer
58 changes: 58 additions & 0 deletions cmkim/2021 카카오 BLIND 예선/프로그래밍3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import math
def solution(fees, records):
answer = []

arr = [['']*3 for _ in range(len(records))]
cars = ''
for i in range(len(records)):
t, n, c = records[i].split() #시간, 차 번호, 상태
arr[i][0] += t
arr[i][1] += n
arr[i][2] += c
if n not in cars:
cars += n
cars += ' '

# for i in range(len(records)):
# print(arr[i])

# print(cars)
car = cars.split()
#print(car)
car.sort()# 자동차번호
#print(car)
time = [0 for _ in range(len(car))] # 이용시간 저장
money = [0 for _ in range(len(car))]
for n in range(len(car)):#번호가 작은 차부터
flag = 0 # 0=들어오기전, 1= 들어온상태
s_time, e_time = 0, 0 #입차, 출차시간
for i in range(len(records)):
if car[n] == arr[i][1]:
if flag == 1:
h, m = arr[i][0].split(':')
e_time = int(h) * 60 + int(m)
time[n] += e_time - s_time
flag = 0
continue
if flag == 0:
h, m = arr[i][0].split(':')
s_time = int(h)*60 + int(m)
#print(h, m)
flag = 1
if flag == 1:
e_time = 1439
time[n] += e_time - s_time

if time[n] >= fees[0]:
money[n] += fees[1]
time[n] -= fees[0]
money[n] += int(math.ceil(time[n] / fees[2]) *fees[3])
else:
money[n] += fees[1]

print(money)


return money

#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"])
3 changes: 3 additions & 0 deletions cmkim/2021 카카오 BLIND 예선/프로그래밍4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
def solution(n, info):
answer = []
return answer
69 changes: 69 additions & 0 deletions cmkim/2021 카카오 BLIND 예선/프로그래밍5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# dp랑 플로이드 워셜?
# INF = 1e9
def floyd(arr, dp1, dp2, info):

size = len(info)
v1 = [[0] * size for _ in range(size)]
v2 = [[0] * size for _ in range(size)]
for i in range(size):
for j in range(size):
if arr[i][j]: #j가 자식노드고
if info[j]: #j가 늑대면
dp2[i][j] += 1
v2[i][j] = 1
# if dp1[i][j] <= dp2[i][j]:
# dp1[i][j] = 0
else:
dp1[i][j] += 1
v1[i][j] = 1
for k in range(size):
for i in range(size):
for j in range(size):
if arr[i][k] and arr[k][j] and not v1[i][k] and not v2[k][j]:
dp1[i][j] = dp1[i][k] + dp1[k][j] + dp1[i][j]
dp2[i][j] = dp2[i][k] + dp2[k][j] + dp2[i][j]
for i in range(size):
print(dp1[i])
print('=====================')
for i in range(size):
print(dp2[i])
print('=====================')

dp3 = [[0] * size for _ in range(size)]
for i in range(size):
for j in range(size):
dp3[i][j] = dp1[i][j] - dp2[i][i]
for i in range(size):
print(dp3[i])
sum = 0
for i in range(size):
for j in range(size):
if dp3[i][j] > 0:
sum += dp3[i][j]
return sum
def solution(info, edges):
answer = 0
size = len(info)
# print(type(size))
arr = [[0] * size for _ in range(size)]
dp1 = [[0] * size for _ in range(size)] #양, 늑대
dp2 = [[0] * size for _ in range(size)]
#dp1[0][0] = 1
#print(dp)


# for i in range(size):
# arr[i][i] = INF
# print(arr[i])
for i in range(len(edges)):
a, b = edges[i][0], edges[i][1]
# print('a, b = ',a, b)
arr[a][b] = 1 # a의 자식은 b다
arr[b][a] = 1
# for i in range(size):
# print(arr[i])
result = floyd(arr, dp1, dp2, info)

return result

#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]])
Loading