쌓고 쌓다
[프로그래머스] 할인 행사 C++ 풀이 본문
https://school.programmers.co.kr/learn/courses/30/lessons/131127
풀이 방법
모든 날짜로부터 10일을 세어보며 내가 필요한 제품을 모두 살 수 있는지 확인하면 된다.
시작 날짜 i로부터 i+10까지 탐색하며
내가 필요한 제품이랑 일치한다면 해당 물품의 필요 개수를 -1 해주며 풀어간다.
만약 시작 날짜 i로부터 i+10이 배열의 범위를 넘어갈 수 있으니 조심하자.
시작 날짜 i로부터 10일 치 제품을 모두 탐색한 후
내가 필요로한 제품의 배열 want(v)를 돌며 양수가 있는지 확인한다.
양수가 있다면 내가 필요한 만큼 모두 사지 못한 것이니
시작 날짜 i에 회원가입은 하지 않는다.
모두 1보다 크지 않다라면 필요한 제품을 모두 살 수 있는 것이니 answer에 1을 더해준다.
전체 코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int solution(vector<string> want, vector<int> number, vector<string> discount) {
int answer = 0;
vector<int> v;
for(int i=0; i<discount.size(); i++) { // discount의 모든 인덱스에서 10일 카운트
int idx = i; // idx는 시작위치 i로 초기화
v=number; // v에 필요한 개수들을 초기화
while(idx < discount.size() && idx < i+10) { // idx는 discount를 넘을 수 없고, 시작 i부터 10일을 초과 불가
for(int j=0; j<want.size(); j++) { // want의 모든 인덱스(j)를 비교하며 discount[idx]와 일치하는 제품 찾기
if(want[j]==discount[idx]) { // 일치하면
v[j]--; // 해당 제품의 원하는 개수 감소
}
}
idx++; // 다음날로 이동
}
bool flag = false; // 필요한만큼 못산 제품이 있는지 판별
for(int k=0; k<v.size(); k++) { // 벡터 v를 모두 탐색
if(v[k]>0) // 필요한 개수가 1이상이면 필요한만큼 모두 못산것임
flag=true; // 못산 제품이 있다(true)로 갱신
}
if(flag==false) // 위의 반목문을 모두 돌았더니 false라면
answer++; // 모든 제품을 필요한만큼 모두 산 것이니 답 추가
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 땅따먹기 C++ 풀이 및 해설 (0) | 2023.03.20 |
---|---|
[프로그래머스] 스킬트리 C++ 풀이 및 해설 (0) | 2023.03.11 |
[프로그래머스] [3차] n진수 게임 C++ 풀이 (0) | 2023.03.03 |
[프로그래머스] 연속 부분 수열 합의 개수 C++ 풀이 (0) | 2023.01.23 |
[프로그래머스] 주식가격 C++ 풀이 (1) | 2023.01.13 |
Comments