코딩 공부 - 프로그래머스 - 할인 행사
문제
설명
- 원하는 10개의 할인 물품을 전부 할인 받을 수 있는 가입 날짜의 총합을 구하는 문제
코드
#include <string>
#include <vector>
#include <map>
using namespace std;
bool solve(vector<string> &want, vector<int> &number, map<string ,int> &m) {
// 10일간의 할인 품목이 원하는 할인 품목인지 확인
for (int i = 0; i < want.size(); i++) {
auto it = m.find(want[i]);
if (it == m.end()) {
return false;
}
if (it->second != number[i]) {
return false;
}
}
return true;
}
int solution(vector<string> want, vector<int> number, vector<string> discount) {
int answer = 0;
map<string, int> m;
// 최초 10일 동안의 할인 품목 저장
for (int i = 0; i < 10; i++) {
if (m.insert({discount[i], 1}).second == false) {
m[discount[i]]+=1;
}
}
// 최초 10일 할인 품목이 원하는 품목과 일치하면 카운트 증가
if (solve(want, number, m)) {
answer++;
}
for (int i = 10; i < discount.size(); i++) {
// 11일 부터 10일 전의 할인 품목 제거, 오늘의 할인 품목 추가 후 할인 품목 여부 검사
if (m.insert({discount[i], 1}).second == false) {
m[discount[i]]+=1;
}
m[discount[i-10]]-=1;
if (solve(want, number, m)) {
answer++;
}
}
return answer;
}
공유하기
Twitter Facebook LinkedIn댓글을 남기시려면 Github 로그인을 해주세요