내일배움캠프/TIL
알고리즘
91song4
2022. 11. 29. 02:59
알고리즘 문제를 풀면서 하루를 보냈습니다.
from collections import deque
def solution(prices):
prices = deque(prices)
stock_sinks = []
while len(prices):
seconds = 0
curr_price = prices.popleft()
for val in prices:
seconds += 1
if curr_price > val:
break
stock_sinks.append(seconds)
return stock_sinks
# prices = list(map(int, input().split()))
# print(solution(prices))
print("정답 = [2, 1, 2, 1, 0] / 현재 풀이 값 = ", solution([6, 9, 5, 7, 4]))
print("정답 = [6, 2, 1, 3, 2, 1, 0] / 현재 풀이 값 = ",
solution([3, 9, 9, 3, 5, 7, 2]))
print("정답 = [6, 1, 4, 3, 1, 1, 0] / 현재 풀이 값 = ",
solution([1, 5, 3, 6, 7, 6, 5]))
def stack_sequence(n, sequence):
top = -1
count = 1
stack = []
stack_sign = []
for num in sequence:
while not num in stack:
stack.append(count)
stack_sign.append('+')
count += 1
top += 1
if stack[top] != num:
return print('NO')
else:
stack.pop()
top -= 1
stack_sign.append('-')
for char in stack_sign:
print(char)
# sequence = list()
# n = int(input())
# for _ in range(n):
# sequence.append(int(input()))
# stack_sequence(n, sequence)
stack_sequence(8, [4, 3, 6, 8, 7, 5, 2, 1])
from collections import deque
shop_prices = [30000, 2000, 1500000]
user_coupons = [20, 40]
def get_max_discounted_price(prices, coupons):
result = 0
prices.sort(reverse=True)
coupons.sort(reverse=True)
while len(coupons) and len(prices):
result += int(prices.pop(0) * (1-(coupons.pop(0) / 100)))
while len(prices):
result += prices.pop()
return result
print("정답 = 926000 / 현재 풀이 값 = ",
get_max_discounted_price([30000, 2000, 1500000], [20, 40]))
print("정답 = 485000 / 현재 풀이 값 = ",
get_max_discounted_price([50000, 1500000], [10, 70, 30, 20]))
print("정답 = 1550000 / 현재 풀이 값 = ",
get_max_discounted_price([50000, 1500000], []))
print("정답 = 1458000 / 현재 풀이 값 = ",
get_max_discounted_price([20000, 100000, 1500000], [10, 10, 10]))
from collections import deque
def is_correct_parenthesis(string):
parentheses_open = 0
parentheses_close = 0
for sign in string:
if sign == '(':
parentheses_open += 1
else:
parentheses_close += 1
if parentheses_open < parentheses_close:
return False
if parentheses_open == parentheses_close:
return True
return False
print("정답 = True / 현재 풀이 값 = ", is_correct_parenthesis("(())"))
print("정답 = False / 현재 풀이 값 = ", is_correct_parenthesis(")"))
print("정답 = False / 현재 풀이 값 = ", is_correct_parenthesis("((())))"))
print("정답 = False / 현재 풀이 값 = ", is_correct_parenthesis("())()"))
print("정답 = False / 현재 풀이 값 = ", is_correct_parenthesis("((())"))
def get_melon_best_album(genre_array, play_array):
melon_dic = {}
melon_arr = []
result = []
# 최대 빈도수를 구하는 식
for music in zip(genre_array, play_array):
if music[0] in melon_dic:
melon_dic[music[0]] += music[1]
else:
melon_dic[music[0]] = music[1]
melon_arr.append(music)
# 내림차순으로 정렬
melon_dic = sorted(melon_dic.items(),
key=lambda item: item[1], reverse=True)
melon_arr.sort(reverse=True)
while len(melon_dic) != 0:
genre_many = melon_dic.pop(0)[0]
count = 0
for pop_music in melon_arr:
# while count != 2:
if genre_many == pop_music[0]:
for i, music in enumerate(zip(genre_array, play_array)):
if pop_music == music:
result.append(i)
count += 1
if count == 2:
break
if count == 2:
break
return result
print("정답 = [4, 1, 3, 0] / 현재 풀이 값 = ", get_melon_best_album(["classic",
"pop", "classic", "classic", "pop"], [500, 600, 150, 800, 2500]))
print("정답 = [0, 6, 5, 2, 4, 1] / 현재 풀이 값 = ", get_melon_best_album(["hiphop", "classic",
"pop", "classic", "classic", "pop", "hiphop"], [2000, 500, 600, 150, 800, 2500, 2000]))
3주차 내용은 숙제와 문제에 담겨있습니다.
숙제와 문제코드를 남겨봅니다.