멀쩡한 사각형
import math
def solution(w,h):
# answer = 0
# for i in range(1,h+1):
# a = w * i/h
# answer += w - math.ceil(a)
# return 2*answer
mn = min(w,h)
mx = max(w,h)
pre = 0
throw = 0
for i in range(1,mn+1):
now = mx * i/mn
throw += math.ceil(now) - math.floor(pre)
pre = now
if math.floor(now) == math.ceil(now):
answer = (mn/i) * (mx*i - throw)
break
return answer
124 나라의 숫자
def solution(n):
answer = ''
a = n
b = 0
while a>0:
b = (a-1)%3
a = (a-1)//3
if b == 0:
answer += '1'
elif b == 1:
answer += '2'
elif b == 2:
answer += '4'
answer = ''.join(reversed(list(answer)))
return answer
스킬트리
def solution(skill, skill_trees):
answer = 0
for i in skill_trees:
skill_order = ''
for j in i:
if j in skill:
skill_order+=j
if skill_order == skill[:len(skill_order)]:
answer += 1
return answer
삼각 달팽이
def solution(n):
answer = []
a = []
for i in range(1, n+1):
a.append([0 for j in range(i)])
i = 0
j = 0
mode = 0
for k in range(1, n*(n+1)//2+1):
a[i][j] = k
if mode == 0:
if i+1 == n or a[i+1][j] != 0:
mode = 1
j+=1
else:
i+=1
elif mode == 1:
if j+1 == len(a[i]) or a[i][j+1] != 0:
mode = 2
i-=1
j-=1
else:
j+=1
elif mode == 2:
if a[i-1][j-1] != 0:
mode = 0
i+=1
else:
i-=1
j-=1
for i in a:
for j in i:
answer.append(j)
return answer
문자열 압축
def solution(s):
answer = len(s)
for i in range(1, len(s)//2+1):
pre = s[:i]
idx = i
temp = ''
count = 1
while idx <= len(s)-i:
now = s[idx:idx+i]
if pre == now:
count += 1
else:
# if count != 1:
# temp += str(count)+pre
# else:
# temp += pre
temp += (str(count) if count>1 else '')+pre
count = 1
pre = now
idx += i
if count != 1:
temp += str(count)+pre+s[idx:]
else:
temp += pre+s[idx:]
if len(temp) < answer:
answer = len(temp)
return answer
더 맵게
import heapq as hq
def solution(scoville, K):
answer = 0
hq.heapify(scoville)
while scoville:
first = hq.heappop(scoville)
if first >= K:
break
if not scoville:
return -1
second = hq.heappop(scoville)
answer += 1
hq.heappush(scoville, first+2*second)
return answer
괄호 변환
def solution(p):
answer = editString(p)
return answer
def checkCorrect(p):
stack = []
for i in p:
if i == '(':
stack.append(i)
else:
if stack and stack[-1] == '(':
stack.pop()
else:
stack.append(i)
if not stack:
return True
else:
return False
def editString(p):
if not p:
return ''
a = 0
b = 0
for i, v in enumerate(p):
if v == '(':
a += 1
else:
b += 1
if a == b:
u = p[:i+1]
v = p[i+1:]
break
if checkCorrect(u):
return u+editString(v)
else:
temp = ''
for i in u[1:-1]:
if i == '(':
temp += ')'
else:
temp += '('
return '('+editString(v)+')'+temp
타겟 넘버
def solution(numbers, target):
answer = 0
a = []
result = []
stack = [[-1,0]]
while stack:
temp = stack.pop()
result = result[:temp[0]+1]
result.append(temp[1])
if temp[0] < len(numbers)-1:
stack.append([temp[0]+1, numbers[temp[0]+1]])
stack.append([temp[0]+1, -numbers[temp[0]+1]])
else:
a.append(result[:])
for i in a:
if sum(i) == target:
answer += 1
return answer
가장 큰 정사각형 찾기
def solution(board):
answer = 0
# 완전탐색
# w_max = max([i.count(1) for i in board])
# temp = [0 for i in board[0]]
# for i in board:
# for j, v in enumerate(i):
# if v == 1:
# temp[j] += 1
# h_max = max(temp)
# n = min(w_max, h_max)
# for i in range(n,0,-1):
# for j in range(len(board)-i+1):
# for k in range(len(board[0])-i+1):
# temp = [x[k:k+i] for x in board[j:j+i]]
# flag = True
# for a in temp:
# if 0 in a:
# flag = False
# break
# if flag:
# return i*i
for i in range(1, len(board)):
for j in range(1, len(board[i])):
if board[i][j] != 0:
board[i][j] += min(board[i-1][j-1], board[i-1][j], board[i][j-1])
#answer = max(list(map(max, board))) ** 2
answer = max([max(x) for x in board]) ** 2
return answer
올바른 괄호
def solution(s):
stack = []
for i in s:
if i == '(':
stack.append(i)
else:
if stack and stack[-1] == '(':
stack.pop()
else:
stack.append(i)
if not stack:
return True
else:
return False
튜플
def solution(s):
answer = []
StoList = []
tempNum = ''
tempList = []
for i in s[1:-1]:
if i!=',' and i!='{' and i!='}':
tempNum += i
else:
if tempNum != '':
tempList.append(int(tempNum))
tempNum = ''
if i=='}':
StoList.append(tempList)
tempList = []
StoList.sort(key=len)
for i in StoList:
for j in i:
if j not in answer:
answer.append(j)
return answer
다음 큰 숫자
def solution(n):
a = n+1
binN = list(bin(n))[2:]
one = binN.count('1')
while True:
binA = list(bin(a))[2:]
if binA.count('1') == one:
return a
else:
a += 1
땅따먹기
def solution(land):
answer = 0
score = land[0]
for i in range(1, len(land)):
scoreTemp = score[:]
for j in range(len(land[i])):
maxScore = max([scoreTemp[k] for k in range(len(scoreTemp)) if k != j]) + land[i][j]
score[j] = maxScore
print(score, scoreTemp)
answer = max(score)
return answer
폰켓몬
def solution(nums):
n = len(nums)//2
s = set(nums)
return n if n<len(s) else len(s)
숫자의 표현
def solution(n):
answer = 0
for i in range(1, n//2+1):
num = i
temp = 0
while True:
temp += num
if temp == n:
answer += 1
elif temp > n:
break
num += 1
return answer+1
최솟값 구하기
SELECT min(datetime) from animal_ins
최댓값과 최솟값
def solution(s):
answer = ''
lst = list(map(int, s.split(' ')))
return answer+str(min(lst))+' '+str(max(lst))
최솟값 만들기
def solution(A,B):
answer = 0
A.sort()
B.sort(reverse=True)
for i in range(len(A)):
answer += A[i]*B[i]
return answer