티스토리 뷰

문제

 

https://school.programmers.co.kr/learn/courses/30/lessons/150368

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

 

효율적으로 계산하는 방법이 있는지 고민을 했었다. 근데 emoticons의 길이가 최대 7이라는 점에서 완전탐색을 이용해도 되겠다는 생각을 했다. 할인율은 총 네 가지 경우만 존재하므로 최대 유저가 100명이어도 해볼만하다고 생각했다. 

 

그래서 재귀를 이용해 우선 모든 할인율 케이스를 미리 구해주었다. 그리고 매 경우별로 직접 계산해서 결과를 출력하였다.

import Foundation

func solution(_ users:[[Int]], _ emoticons:[Int]) -> [Int] {

    var result = [0,0]
    var list: [[Int]] = []
    let discount = [10,20,30,40]
    
    func permu(_ arr: [Int]) {
        if arr.count == emoticons.count {
            list.append(arr)
            return
        }
        for i in 0..<4 {
            permu(arr + [discount[i]])
        }
    }
    permu([])
    
    for disCase in list {
        var plusUser = 0
        var total = 0
        for i in 0..<users.count {
            let minDis = users[i][0]
            let minTotal = users[i][1]
            var tempTotal = 0
            for j in 0..<disCase.count {
                if disCase[j] < minDis {
                    continue
                }
                tempTotal += emoticons[j] * (100 - disCase[j]) / 100
            }
            if tempTotal >= minTotal {
                plusUser += 1
            } else {
                total += tempTotal
            }
        }
        if result[0] < plusUser || (result[0] == plusUser && result[1] < total) {
            result = [plusUser,total]
        }
    }
    return result
}

 

 

_____________________________________________________________________________________________________

 

 

나름대로 주어진 최대 케이스의 규모가 작은지 큰지 판단을 해보는데, 기준을 어떻게 세워야할지 아직 잘 모르겠음.

댓글
최근에 올라온 글
Total
Today
Yesterday