우기의 알 블로그 저자 한승욱이라고 합니다.
스스로 알을 깨고 나오는 새처럼
언젠가 알을 깨고 온전한 나 자신이 되었을 때, 그때를 기다리며 제 속에서 솟아 나오는 것을 글로써 표현하고자 합니다.
'개발 기술블로그'를 위주로 저 한승욱의 다양한 관심사, 생각, 철학 등을 포스팅합니다.
# 코드 스니펫
shop_prices =[30000,2000,1500000]
user_coupons =[20,40]defget_max_discounted_price(prices, coupons):# 이 곳을 채워보세요!return0print(get_max_discounted_price(shop_prices, user_coupons))# 926000 이 나와야 합니다.
shop_prices =[30000,2000,1500000]
user_coupons =[20,40]defget_max_discounted_price(prices, coupons):
result_dict ={}
prices.sort(reverse=True)
coupons.sort(reverse=True)# 두 배열의 크기가 다를 수 있게 때문에 while문 사용
price_index =0
coupon_index =0
max_discounted_price =0while price_index <len(prices)and coupon_index <len(coupons):
max_discounted_price += prices[price_index]*(100- coupons[coupon_index])/100
price_index +=1
coupon_index +=1while price_index <len(prices):
max_discounted_price += prices[price_index]
price_index +=1return max_discounted_price
print(get_max_discounted_price(shop_prices, user_coupons))# 926000 이 나와야 합니다.
여기서 핵심: 두 배열의 크기가 다를 수 있는 경우에는 while 문을 사용
Q2. 올바른 괄호
# 코드 스니펫
s ="(())()"defis_correct_parenthesis(string):# 구현해보세요!returnprint(is_correct_parenthesis(s))# True 를 반환해야 합니다!
s ="(())()("defis_correct_parenthesis(string):
stack =[]for i inrange(len(string)):if string[i]=="(":
stack.append(i)# 어떤 값이 들어가도 상관 없음elif string[i]==")":iflen(stack)==0:returnFalseelse:
stack.pop()iflen(stack)!=0:returnFalseelse:returnTrueprint(is_correct_parenthesis(s))# True 를 반환해야 합니다!
순차적으로 들어가야 하는 구조같으면 스택을 사용
Q3. 멜론 베스트 앨범 뽑기
# 코드 스니펫
genres =["classic","pop","classic","classic","pop"]
plays =[500,600,150,800,2500]defget_melon_best_album(genre_array, play_array):# 구현해보세요!return[]print(get_melon_best_album(genres, plays))# 결과로 [4, 1, 3, 0] 가 와야 합니다!
genres =["classic","pop","classic","classic","pop"]
plays =[500,600,150,800,2500]# 장르 별로 재생된 횟수를 저장해야함# 장르 별로 곡의 정보(인덱스, 재생횟수)를 배열로 묶어 저장한다.defget_melon_best_album(genre_array, play_array):dict={}
genre_index_play_array ={}for i inrange(len(genre_array)):
genre = genre_array[i]
play = play_array[i]if genre notindict:dict[genre]= play
genre_index_play_array[genre]=[[i, play]]else:dict[genre]+= play
genre_index_play_array[genre].append([i, play])
sorted_dict =sorted(dict.items(), key=lambda item: item[1], reverse=True)
result =[]for genre, _value in sorted_dict:
index_play_array = genre_index_play_array[genre]
sorted_index_play_array =sorted(index_play_array, key=lambda item:item[1], reverse=True)for i inrange(len(sorted_index_play_array)):if i >1:break
result.append(sorted_index_play_array[i][0])return result
print(get_melon_best_album(genres, plays))# 결과로 [4, 1, 3, 0] 가 와야 합니다!
알고리즘 3주차 - 숙제
Q1. 쓱 최대로 할인 적용하기
Q2. 올바른 괄호
Q3. 멜론 베스트 앨범 뽑기
'기술개발 > Algorithm' 카테고리의 다른 글