알고리즘/프로그래머스

[프로그래머스] 할인 행사 C++ (Lv.2)

lheunoia 2023. 4. 18. 15:36

 

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

이번 문제는 해시(key-value) 문제였습니다. 

 

 

 

 

 

 

📝 문제 풀이

1. 10일 연속으로 할인하는 제품과 수량을 담을 map 객체 생성 ⭐️

2. discount.size() - 9 만큼 for문을 돌면서 bool 타입의 변수로 회원가입을 할 수 있는지 체크

3. 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치한다면 answer++

4. 10일 중 첫째 날의 수량은 1 감소시키고 다음 날의 수량은 1 증가

 

 

 

 

👩🏻‍💻 C++ 코드

#include <string>
#include <vector>
#include <map>

using namespace std;

int solution(vector<string> want, vector<int> number, vector<string> discount) {
    int answer = 0;
    map<string, int> m;
    
    for (int i=0; i<10; i++) {
        m[discount[i]]++;
    }
    
    for (int i=0; i<discount.size()-9; i++) {
        bool wantSignup = true;
        
        for (int j=0; j<want.size(); j++) {
            if (m[want[j]] != number[j]) {
                wantSignup = false;
                break;
            }
        }
        
        if (wantSignup) {
            answer++;
        }
        
        m[discount[i]]--;
        if (i < discount.size()-10) m[discount[i+10]]++;
    }
    
    return answer;
}

 

프로그래머스 - 결과 화면



 

 

 

 

반응형