Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SQL
- 코테
- 공식문서
- groupby
- 방문길이
- 고득점kit
- 해시
- 파이선
- h-index
- 분할정복
- 기초
- SQL #프로그래머스 #MAX #MIN
- H-인덱스
- 스택
- 골든래빗
- 파이썬
- 고득점키트
- SQL #프로그래머스 #조건절 #ISNULL
- 프로그래머스
- SQL #프로그래머스 #SELECT
- Python
- 파이썬 #프로그래머스 #코딩테스트
- 행렬곱셈
- 2단계
- SQL고득점키트
- 코딩테스트
- level2
- 카카오코테
- 재귀
- Join
Archives
- Today
- Total
영아일지
[프로그래머스] level 2 이모티콘 할인행사 본문
코딩테스트 연습 - 이모티콘 할인행사 | 프로그래머스 스쿨 (programmers.co.kr)
[내 풀이]
1. emoticon함수를 활용하여 각 이모티콘의 임의 할인율을 lst로 정리한다
2. 모든 사용자들의 기준 할인율, 기준 가격을 하나씩 비교하여 total_num, total_price에 저장해놓는다
3. emoticon함수에서 종료조건에 다다랐을 때 이모티콘 플러스 서비스 가입자가 가장 많으며, 그 후 판매액이 가장 많은 값을 mx_num, mx_price에 저장한 후 반환한다.
def solution(users, emoticons):
global mx_num, mx_price
mx_num, mx_price = 0, 0
def user(lst): #모든 사용자의 플러스 서비스 가입자, 판매액
total_num = 0
total_price = 0
for i in range(len(users)):
pc = users[i][0] / 100
pr = users[i][1]
sm = 0
for j in range(len(lst)):
if pc <= lst[j][0]:
sm += lst[j][1]
if sm >= pr:
total_num += 1
else:
total_price += sm
return total_num, total_price
def emoticon(e, lst): #각 이모티콘의 할인율 케이스
global mx_num, mx_price
if e == len(emoticons):
num, price = user(lst)
if num > mx_num:
mx_num = num
mx_price = price
if num == mx_num:
if mx_price < price:
mx_price = price
return
for i in [0.1, 0.2, 0.3, 0.4]:
emoticon(e + 1, lst + [[i, (1 - i) * emoticons[e]]])
emoticon(0, [])
return mx_num, int(mx_price)
그림을 안그려보고 풀려고 하니까 어느 부분을 먼저 해야할지에 대한 혼란이 있었다. 피치못할 상황이 아니라면 아는 것같더라도 종이로 한번 그려보자.
함수안에 재귀함수를 넣는 과정에서 global를 활용하는 방법을 배웠다!
'디지털 > 코딩테스트' 카테고리의 다른 글
[프로그래머스 level-2] 괄호 변환 (0) | 2023.06.22 |
---|---|
[프로그래머스 고득점 키트 - 스택/큐] Level2 - 프로세스 (0) | 2023.05.30 |
[프로그래머스 kakao] level 1 - 실패율 (0) | 2023.05.30 |
코딩테스트 - 분할정복 알고리즘 (0) | 2023.04.27 |
프로그래머스 피보나치 수 문제 (0) | 2023.04.15 |