https://school.programmers.co.kr/learn/courses/30/lessons/131127
λ¬Έμ μ€λͺ
XYZ λ§νΈλ μΌμ ν κΈμ‘μ μ§λΆνλ©΄ 10μΌ λμ νμ μ격μ λΆμ¬ν©λλ€. XYZ λ§νΈμμλ νμμ λμμΌλ‘ λ§€μΌ ν κ°μ§ μ νμ ν μΈνλ νμ¬λ₯Ό ν©λλ€. ν μΈνλ μ νμ ν루μ νλμ©λ§ ꡬ맀ν μ μμ΅λλ€. μλ°ν μ νμ΄λ μμ μ΄ μνλ μ νκ³Ό μλμ΄ ν μΈνλ λ μ§μ 10μΌ μ°μμΌλ‘ μΌμΉν κ²½μ°μ λ§μΆ°μ νμκ°μ μ νλ € ν©λλ€.
μλ₯Ό λ€μ΄, μ νμ΄κ° μνλ μ νμ΄ λ°λλ 3κ°, μ¬κ³Ό 2κ°, μ 2κ°, λΌμ§κ³ κΈ° 2κ°, λλΉ 1κ°μ΄λ©°, XYZ λ§νΈμμ 15μΌκ° νμμ λμμΌλ‘ ν μΈνλ μ νμ΄ λ μ§ μμλλ‘ μΉν¨, μ¬κ³Ό, μ¬κ³Ό, λ°λλ, μ, μ¬κ³Ό, λΌμ§κ³ κΈ°, λ°λλ, λΌμ§κ³ κΈ°, μ, λλΉ, λ°λλ, μ¬κ³Ό, λ°λλμΈ κ²½μ°μ λν΄ μμλ΄ μλ€. 첫째 λ λΆν° μ΄ν κ°μλ λλΉκ° ν μΈνμ§ μκΈ° λλ¬Έμ 첫째 λ μλ νμκ°μ μ νμ§ μμ΅λλ€. λμ§Έ λ λΆν° μ΄ν κ°μλ λ°λλλ₯Ό μνλ λ§νΌ ν μΈκ΅¬λ§€ν μ μκΈ° λλ¬Έμ λμ§Έ λ μλ νμκ°μ μ νμ§ μμ΅λλ€. μ μ§Έ λ , λ·μ§Έ λ , λ€μ―μ§Έ λ λΆν° κ°κ° μ΄νμ μνλ μ νκ³Ό μλμ΄ μΌμΉνκΈ° λλ¬Έμ μ μ€ ν루μ νμκ°μ μ νλ € ν©λλ€.
μ νμ΄κ° μνλ μ νμ λνλ΄λ λ¬Έμμ΄ λ°°μ΄ wantμ μ νμ΄κ° μνλ μ νμ μλμ λνλ΄λ μ μ λ°°μ΄ number, XYZ λ§νΈμμ ν μΈνλ μ νμ λνλ΄λ λ¬Έμμ΄ λ°°μ΄ discountκ° μ£Όμ΄μ‘μ λ, νμλ±λ‘μ μ νμ΄κ° μνλ μ νμ λͺ¨λ ν μΈ λ°μ μ μλ νμλ±λ‘ λ μ§μ μ΄ μΌμλ₯Ό return νλ solution ν¨μλ₯Ό μμ±νμμ€. κ°λ₯ν λ μ΄ μμΌλ©΄ 0μ return ν©λλ€.
λ΄ μ½λ
첫λ²μ§Έ νμ΄
#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> shopping_list;
// μΌν 리μ€νΈ μ±μ°κΈ°
for(int i = 0; i < want.size(); ++i)
{
shopping_list.insert({want[i], number[i]});
}
// λͺ¨λ ν μΈ λ°μ μ μλ λ μ μ μ°ΎκΈ°
for(int i = 0; i < discount.size(); ++i)
{
map<string, int> copy = shopping_list;
int last_day = i+10;
if(last_day > discount.size())
last_day = discount.size();
for(int d = i; d < last_day; ++d)
{
auto iter = copy.find(discount[d]);
if(iter != copy.end())
{
--copy[iter->first];
if(copy[iter->first] <= 0)
copy.erase(iter);
}
}
if(copy.empty())
++answer;
}
return answer;
}
λλ²μ§Έ νμ΄
첫λ²μ§Έ νμ΄λ₯Ό λ°νμΌλ‘ μ‘°κΈ λ 쑰건μ μΆκ°ν΄μ λ°λ³΅μ μ΅μννμ¬ μκ°μ μ‘°κΈ λ μ€μΈ μ½λ
#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> shopping_list;
int total = 0;
// μΌν 리μ€νΈ(map) μ±μ°κΈ°
for(int i = 0; i < want.size(); ++i)
{
shopping_list.insert({want[i], number[i]});
total += number[i];
}
// κ° ν μΈ νμ¬ λ μ μμμΌλ‘ μ€μ νμ¬ 10μΌ λμ 물건μ λͺ¨λ μ΄ μ μλμ§ κ²μ¬νλ€.
for(int i = 0; i < discount.size(); ++i)
{
// μΌν 리μ€νΈ 볡μ
map<string, int> copy = shopping_list;
// λ§μ§λ§ λ κ³μ°
int last_day = i+10;
if(last_day > discount.size())
last_day = discount.size();
// λ¨μ λ μ΄ μΌν 리μ€νΈμ 물건μ μλ³΄λ€ μ μ κ²½μ°, λͺ¨λ 물건μ μ¬μ§ λͺ»νλ―λ‘
// μ΄νμ λ λ€μ λν΄ λ μ΄μ κ²μ¬λ₯Ό μ§ννμ§ μκ³ λμ΄κ°λ€.
if(last_day-i < total)
break;
// 10μΌκ° ν μΈ νλͺ© κ²μ¬
for(int d = i; d < last_day; ++d)
{
// μ¬κ³ μ νλ λ¬Όκ±΄μ΄ μΌν 리μ€νΈμ μλ€λ©΄ mapμμ ν΄λΉ 물건μ κ°μλ₯Ό μ€μΈλ€. (0μ΄ λλ©΄ λΊλ€)
auto iter = copy.find(discount[d]);
if(iter != copy.end())
{
--copy[iter->first];
if(copy[iter->first] <= 0)
copy.erase(iter);
}
// μΌν 리μ€νΈμ λ μ΄μ λ¬Όκ±΄μ΄ λ¨μ§ μμλ€λ©΄ κ²μ¬λ₯Ό μ’
λ£νλ€.
if(copy.empty())
break;
}
// μΌν 리μ€νΈκ° λΉμλ€λ©΄ λͺ¨λ 물건μ μ΄ μ μμΌλ μ λ΅μΌλ‘ μΆκ°νλ€.
if(copy.empty())
++answer;
}
return answer;
}
ν μΌ 10λ²κ³Ό 8λ²μ λΉκ΅νλ©΄ μ€ν μκ°μ΄ μ€ κ²μ νμΈν μ μλ€.
'π₯οΈ Study Note > Coding Test' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€]level.2 - 2xn νμΌλ§(C++) (0) | 2023.08.08 |
---|---|
[νλ‘κ·Έλλ¨Έμ€]level.2 - λνμ€ κ²μ(C++) (0) | 2023.08.07 |
[νλ‘κ·Έλλ¨Έμ€]level.3 - μΈμ¬κ³ κ³Ό(C++) (1) | 2023.08.01 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - N-Queen(C++) (0) | 2023.07.31 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - n^2 λ°°μ΄ μλ₯΄κΈ°(C++) (0) | 2023.07.28 |