[ 프로그래머스 ] 할인 행사
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
풀이
원하는 물건의 종류와 개수가 할인하는 물건의 종류와 개수와 같을 때를 찾기 위해 먼저 원하는 물건들을 map에 넣고, 일치하는 순간을 탐색하였습니다. 그리고 탐색 기간이 10일이기 때문에, index가 10 이상이 되면 맨 앞 원소를 제거하고 탐색하여 간격을 유지하면서 일치하는 순간을 탐색하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#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> list;
for (int i = 0; i < want.size(); i++)
{
list.insert({ want[i],number[i] });
}
map<string, int> countList;
for (int i = 0; i < discount.size(); i++)
{
if (i >= 10)
{
int j = 0;
for (; j < want.size(); j++)
{
if (list[want[j]] != countList[want[j]])
{
break;
}
}
if (j == want.size())
{
answer++;
}
countList[discount[i - 10]]--;
if (countList.find(discount[i]) != countList.end())
{
countList[discount[i]]++;
}
else
{
countList.insert({ discount[i],1 });
}
if (i == discount.size() - 1)
{
int j = 0;
for (; j < want.size(); j++)
{
if (list[want[j]] != countList[want[j]])
{
break;
}
}
if (j == want.size())
{
answer++;
}
}
}
else
{
if (countList.find(discount[i]) != countList.end())
{
countList[discount[i]]++;
}
else
{
countList.insert({ discount[i],1 });
}
}
}
return answer;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.