상세 컨텐츠

본문 제목

[프로그래머스] 할인 행사

Algorithm

by 쑤야. 2023. 12. 18. 13:36

본문

https://school.programmers.co.kr/learn/courses/30/lessons/131127?language=python3

 

프로그래머스

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

programmers.co.kr

 

접근


  • 회원 자격 10일 → 슬라이딩 윈도우 활용
  • 제품 구매 수량을 카운팅 → 딕셔너리 활용

 

로직


  • 구매해야 하는 상품과, 앞으로 구매해야 하는 개수를 담은 제품 카운팅 딕셔너리를 생성 후, 초기화한다. 
  • 0부터 9까지 처음 10개에 대해서 카운팅을 갱신한다. 
  • 인덱스 10부터 discount의 길이 + 10까지 반복문을 시작한다. 
    • 10을 모두 고려하지 않고, 9일 또는 8일 등에 대해서도 조건을 충족할 수 있기 때문이다.
  • 반복문에서 각각의 상품이 앞으로 구매해야 하는 개수가 모두 0이하라면, 조건을 충족한 것이므로 result를 1 더해준다. 
  • 10일 전 날짜에 대한 할인 상품의 구매는 취소하고, 지금의 날짜에 대한 할인 상품은 구매한다. 

 

주의점

 


  • 개수를 늘리고 줄일 때, 양수 값으로만 변경 제한을 걸면 실패한다. 즉, 음수로 값이 변경되어도 된다. 

 

코드


def solution(want, number, discount):
    
    wantMap = {}
    for (i, w) in enumerate(want):
        wantMap[w] = number[i]
    
    for i in discount[0:10]:
        if i in want:
            wantMap[i] -= 1

    result = 0
    for i in range(10, len(discount)+10):
        
        if all(x <= 0 for x in wantMap.values()):
            result += 1
            
        if i < len(discount) and discount[i] in wantMap:
            wantMap[discount[i]] -= 1
        if discount[i-10] in wantMap:
            wantMap[discount[i-10]] += 1
        
    return result
func solution(_ want:[String], _ number:[Int], _ discount:[String]) -> Int {

    var map = [String:Int]()
    for (i, w) in want.enumerated() {
        map[w] = number[i]
    }
    
    for i in discount[0..<10] {
        if map[i] != nil {
            map[i]! -= 1
        }
    }
    
    var result = 0
    for i in 10..<discount.count+10{
        //가입 가능 날짜인지 점검
        if map.allSatisfy({ $0.value <= 0 }) {
            result += 1
        }
        
        //날짜 슬라이딩 윈도우
        if i < discount.count && map[discount[i]] != nil {
            map[discount[i]]! -= 1
        }
        if map[discount[i-10]] != nil {
            map[discount[i-10]]! += 1
        }
    }
    
    return result
}

'Algorithm' 카테고리의 다른 글

[프로그래머스] 피로도  (0) 2023.12.20
[프로그래머스] 프로세스  (1) 2023.12.20
[프로그래머스] H-Index  (0) 2023.12.18
[프로그래머스] n^2 배열 자르기  (1) 2023.12.15
[프로그래머스] 괄호 회전하기  (0) 2023.12.15

관련글 더보기