오늘 풀 문제는 2023 KAKAO BLIND RECRUITMENT 의 이모티콘 할인행사로 정했다. 카카오 코딩테스트라 함은 ... 어렵다는 생각이 들기 마련인데, 나 또한 지레 겁먹고 포기하려다가 끝까지 풀어보게 되었다. 벌써 많은 분들이 문제를 푸셨던데 대단하시다...!
프로그래머스 <이모티콘 할인행사> 문제 보기
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
프로그래머스 <이모티콘 할인행사> 문제 풀이
import math
from itertools import product
def solution(users, emoticons):
answer = []
rates = [10, 20, 30, 40]
rates = list(product(rates, repeat = len(emoticons)))
for rate in rates:
check = [0, 0]
for user in users:
price = 0
for each in range(len(rate)):
if user[0] > rate[each]:
continue
else:
price += math.ceil(emoticons[each]*(100-rate[each])/100)
if price >= user[1]:
check[0] += 1
else:
check[1] += price
answer.append(check)
answer = sorted(answer, key = lambda x: (-x[0], -x[1]))
return answer[0]
결국 완전탐색(브루트 포스)으로 모든 경우를 따져봐야 하는 문제였다. 할인율이 4가지고, 이모티콘의 최대 개수는 7개이기 때문에 많아봐야 4^7개의 경우만 봐주면 된다.
이 문제의 포인트는 다음과 같다.
1. itertools의 product를 사용하여 각 이모티콘이 할인되는 할인율(rates (10, 20, 30, 40))의 경우의 수를 모두 구해주었다.
2. check = [0, 0] 를 두어 rates 하나를 돌 때마다 [이모티콘 플러스에 가입하는 사람 수, 판매액] 을 구해준 후 answer 리스트에 전부 넣어주었다. (* 이때 주의할 점은, 만약 user가 설정한 할인율보다 이모티콘 할인율이 낮을 경우 continue를 통해 경우를 세지 않고, 그렇지 않을 경우에 구매하게 되는 금액을 price에 저장해주었다가 해당 user가 정해둔 금액을 넘었을 시 이모티콘 플러스를 구입한 수 증가, 그렇지 않다면 판매액에 더해주는 로직인 것이다.) >> 나는 이 부분을 고민하는데 오랜 시간이 걸렸다...
3. 이후 answer 리스트를 이모티콘 플러스 가입자 수 순 >> 판매액 순 으로 내림차순 정렬하여 가장 앞에 있는 리스트를 반환하도록 하였다.
오늘 머리가 정말 안 돌아가는 날이었는데... 이 문제를 풀게 되었다. 그래서 문제를 이해하고 로직을 구현하는데 정말 오랜 시간이 걸렸던 것 같다. (오히려 카카오 문제에 겁을 더 먹게 되었달까...) 2023 KAKAO BLIND RECRUITMENT 후기를 찾아봤는데 역시나 이건 쉬운 문제였다 ㅠㅠ 3-40분 정도 걸려서 푸신 분들이 많은 것 같은데 나는 1시간정도 혹은 그 이상 걸린 것 같다. 오늘은 시간이 없어서 알고리즘 문제를 하나도 풀지 못할 뻔했는데 그래도 하나라도 풀었으니 다행인 것 같다. 아직 1일 1코테, 1일 1블로그, 1일 1커밋을 잘 실천 중이다 :)
'알고리즘 공부 > 코딩테스트(프로그래머스)' 카테고리의 다른 글
[프로그래머스 Level 1] [1차] 다트 게임 (Python 파이썬) 풀이 방법 (2) | 2023.01.09 |
---|---|
[프로그래머스 Level 1] 이상한 문자 만들기 (Python 파이썬) 풀이 방법 (0) | 2023.01.07 |
[프로그래머스 Level 2] 귤 고르기 (Python 파이썬) 풀이 방법 (1) | 2023.01.05 |
[프로그래머스 Level 1] 최소직사각형 (Python 파이썬) 풀이 방법 (0) | 2023.01.04 |
[프로그래머스 Level 2] 멀리 뛰기 (Python 파이썬) 풀이 방법 (2) | 2023.01.04 |