문제
이모티콘 할인율: 10%, 20%, 30%, 40%
유저는 본인이 정한 할인율 이상일 경우에 무조건 이모티콘을 구매한다.
이 때, 구매한 이모티콘 가격이 유저가 정해놓은 가격 이상일 경우 >> 구매했던 이모티콘을 모두 취소하고 카카오 이모티콘 플러스를 구매한다.
이모티콘별로 할인율을 적절히 선택하여 최적의 결과를 도출하여라
- 결과 -> [이모티콘 플러스 가입 수 , 이모티콘 총 구매 가격]
- 우선순위는 1번이 이모티콘 플러스 가입 수, 2번이 이모티콘 총 구매 가격
- users: [본인이 정한 할인율, 본인이 정한 가격]
입출력 예
users | emoticons | result |
[[40, 10000], [25, 10000]] | [7000, 9000] | [1, 5400] |
[[40, 2900], [23, 10000], [11, 5200], [5, 5900], [40, 3100], [27, 9200], [32, 6900]] | [1300, 1500, 1600, 4900] | [4, 13860] |
풀이 과정
- 이모티콘 별로 할인율을 전부 대입하여 최선의 결과를 선택하는 완전 탐색 문제로 예상 -> DFS
- 이모티콘 구입 조건에 맞을 경우 할인을 적용한 이모티콘 가격을 유저별 이모티콘 구매 배열에 저장
- 마지막 이모티콘까지 끝났다면, 각 유저별 구매 금액과 정해놓은 금액 비교 후 result 생성
- 우선순위를 비교하여 적합한 result를 answer에 저장 후 재귀함수 종료
코드
class Solution {
// 할인율 : 10%, 20%, 30%, 40%
// 할인율을 전부 대입하고 최선의 결과를 선택하는 완전 탐색 문제로 예상 -> DFS
val discount = arrayOf(0.4, 0.3, 0.2, 0.1)
var answer: IntArray = intArrayOf(0, 0)
fun solution(users: Array<IntArray>, emoticons: IntArray): IntArray {
Dfs(users, emoticons, 0, Array(users.size, {0}))
return answer
}
// index : 이모티콘 인덱스
fun Dfs(users: Array<IntArray>, emoticons: IntArray, index: Int, temp: Array<Int>){
// temp 정리 저장 후 종료
if(index >= emoticons.size) {
val result = intArrayOf(0, 0)
for(i in temp.indices){
if(temp[i] >= users[i][1]) result[0]++ // 구매 비용이 오바했다면
else result[1] += temp[i] // 오바 안했다면
}
// answer가 비어있다면
if(answer == intArrayOf(0, 0)) answer = result
// 비어있지 않다면
else{
if(answer[0] < result[0]) answer = result // 이모티콘 플러스 기준
else if(answer[0] == result[0]){ // 이모티콘 플로스가 같은 때 구매 비용 기준
answer[1] = Math.max(answer[1], result[1])
}
}
return
}
for(i in discount){
// 유저 별 이모티콘 구매 가격 저장
val save = temp.copyOf()
// 가격 계산 후 save에 저장
for(j in users.indices){
if(i*100 >= users[j][0]){
val price = emoticons[index] - (emoticons[index] * i).toInt()
save[j] += price
}
}
Dfs(users, emoticons, index+1, save)
}
}
}
'코딩 테스트 > DFS' 카테고리의 다른 글
[프로그래머스] N-Queen with Kotlin (0) | 2024.04.04 |
---|---|
[프로그래머스] 2022 KAKAO BLIND RECRUITMENT 양궁대회 with Kotlin (2) | 2024.03.07 |
[프로그래머스] 광물 캐기 Lv.2 with Kotlin (0) | 2024.02.19 |
[프로그래머스] 모음사전 with Kotlin (0) | 2023.11.30 |
[프로그래머스] 타겟 넘버 with Kotlin (0) | 2023.11.07 |