250x250
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 | 29 | 30 |
Tags
- 1 2 3 더하기 풀이
- 연속된 부분 수열의 합 swift
- swift 알고리즘
- swift ac 풀이
- 백준 2xn 타일링 풀이
- 백준 2xn 타일링
- swift 연속된 부분 수열의 합
- rxswift
- swift algorithm
- iOS Charts
- swift
- MVVM
- swift 2xn 타일링
- swift 연속된 부분 수열의 합 풀이
- ac 구현 풀이
- swift 백준 9095
- swift ac
- swift dfs
- swift gRPC
- ac 투포인터
- 123 더하기 풀이
- ac swift 풀이
- ios
- swift codility
- swift ac 문제풀이
- 연속된 부분 수열의 합 투포인터
- swift 9095 풀이
- swift 2xn 타일링 풀이
- swift 프로그래머스
- swift 2xn 타일링 백준
Archives
- Today
- Total
boraBong
[Algorithm] Swift 이모티콘 할인 행사 문제 풀이 [프로그래머스 Level2, 2023 KAKAO BLIND RECRUITMENT] 본문
iOS/Algorithm
[Algorithm] Swift 이모티콘 할인 행사 문제 풀이 [프로그래머스 Level2, 2023 KAKAO BLIND RECRUITMENT]
보라봉_ 2023. 1. 27. 19:31728x90
💬 문제
💬 Idea
1. 먼저 이모티콘 수에 맞는 할인율 조합을 구하자
💡 어떻게 구할 것인가?→ dfs 재귀함수를 만들어서 할인율(10%, 20%, 30%, 40%) 각각을 돌며 array에 더해주자.
- 효율성 높이기 - dfs에서 도출되는 불필요한 조합을 줄이자 (꼭 줄이지 않아도 실행결과는 성공합니다!)
- user가 갖고 있는 가격 기준의 최저값을 구해 sales를 먼저 필터링해주기
- ex. user = [[40, 10000], [25, 10000]] 의 경우 유저들이 구입할 최저 세일 비율이 30% 이므로
할인율 중 30%, 40% 만을 갖고 가격 조합을 만들어줄 수 있다.
2. 할인율 조합을 구한 뒤 해당 조합에서 이모티콘플러스 가입자 수와 판매액이 최댓값인지를 비교하자
💬 풀이
var finalEmtiPlusCnt = 0
var finalSum = 0
var user: [[Int]] = []
var emoticon: [Int] = []
func solution(users:[[Int]], emoticons:[Int]) -> [Int] {
user = users.sorted(by: { $0[0] > $1[0] })
emoticon = emoticons
dfs(index: 0, arr: [], max: emoticons.count, sales: [10, 20, 30, 40].filter({ $0 >= user.last![0] }))
return [finalEmtiPlusCnt, finalSum]
}
func dfs(index: Int, arr: [Int], max: Int, sales: [Int]) {
// 이모티콘의 할인가격 조합인 arr가 emoticon의 개수와 일치할 때
if index == max {
// ✅ 해당 할인가격 조합의 이모티콘플러스 가입자 수와 판매액이 최댓값인지 비교
getResultBySalesComb(arr)
return
}
// 재귀함수 호출 - 할인율(10%, 20%, 30%, 40%) 각각을 돌며 arr에 더해준다
// 이모티콘의 할인가격 조합이 arr에 더해지게됨
for sale in sales {
dfs(index: index + 1, arr: arr + [sale], max: max, sales: sales)
}
}
/// 이모티콘플러스 가입자 수와 판매액 도출 후 최댓값인지 비교하는 메서드
func getResultBySalesComb(_ arr: [Int]) {
var emtiplusCnt = 0
var sum = 0
for u in user {
var userSum = 0
for (index, p) in arr.enumerated() {
// 유저의 기준비율에 맞는 이모티콘만 선별
if p >= u[0] {
userSum += calDiscountPrice(emoticon[index], p)
}
}
// 유저의 기준가격을 넘긴다면 이모티콘 플러스 가입
if userSum >= u[1] {
emtiplusCnt += 1
} else {
// 유저의 기준가격 미만이라면 이모티콘 구매
sum += userSum
}
}
// 현재 할인 비율 모음이 최대 이모티콘 플러스 가입자를 이끌어내는지 확인
if emtiplusCnt > finalEmtiPlusCnt {
finalEmtiPlusCnt = emtiplusCnt
finalSum = sum
} else if emtiplusCnt == finalEmtiPlusCnt {
finalSum = sum > finalSum ? sum : finalSum
}
}
/// 이모티콘 할인 가격 계산 메서드
func calDiscountPrice(_ origin: Int, _ percent: Int) -> Int {
return origin - ((origin / 100) * percent)
}
반응형
'iOS > Algorithm' 카테고리의 다른 글
[Algorithm] Swift 뒤에 있는 큰 수 찾기 문제 풀이 [프로그래머스 Level2] (0) | 2023.02.01 |
---|---|
[Algorithm] Swift 전력망을 둘로 나누기 문제 풀이 [프로그래머스 Level2] (0) | 2023.01.27 |
[Algorithm] Swift 마법의 엘리베이터 문제 풀이 [프로그래머스 Level2] (0) | 2023.01.10 |
[Algorithm/Swift] 그래프 - 탐색 알고리즘 (DFS/BFS) (0) | 2022.11.23 |
[Algorithm] [프로그래머스 Level2] - 괄호 변환 문제 풀이 (Swift) (2) | 2022.09.21 |
Comments