728x90
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๐จ๐ปํ์ด ๊ณผ์
์ฒ ์์ ๋์์ ๊ฐ ํ ํ ์ข ๋ฅ ์๋ง ๊ฐ์ผ๋ฉด ๋๊ธฐ์, ์ค๋ณต์ด ๋์ง ์๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ํฉ๋๋ค. ๋ฐ์ดํฐ์ ๊ฐ์๊ฐ ์ต๋ 1,000,000๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๊ฒ์, ์ฝ์ , ์ญ์ ์ ์ข์ ํด์(Hash)๋ฅผ ์ฐ๊ธฐ๋ก ํ์ต๋๋ค. Key-value ๊ตฌ์กฐ์ธ unordered_map๊ณผ Key ๊ตฌ์กฐ์ธ unordered_set์ ์ฌ์ฉํ์์ต๋๋ค.
์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ๋ ์ฒ์์ ์ฒ ์์๊ฒ ํ ์กฐ๊ฐ๋ ์๊ณ , ๋์์ด ๋ชจ๋ ์ผ์ดํฌ ์กฐ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ์ํ๋ก ์ถ๋ฐํฉ๋๋ค.
- topping์ ์ํํ๋ฉฐ, ๊ฐ ํ ํ์ ๊ฐ์ ์นด์ดํธํ์ฌ ์ ์ฅ (unordered_map) \( \rightarrow \) ๋์ ๊บผ
- ๋ค์ topping์ ์ํํ๋ฉฐ, ์ฒ ์์๊ฒ ํ ์กฐ๊ฐ์ฉ ๋์์ด ์๋ณดํด์ค๋๋ค.
- ์ฒ ์๋ ํ ํ์ ๊ฐ์๋ ํ์ ์๊ณ , ์ข ๋ฅ ์ ๋ณด๋ง ์์ผ๋ฉด ๋๊ธฐ์ unordered_set์ ์ฌ์ฉ
- ๋์์ด ์ฒ ์์๊ฒ ํ ์กฐ๊ฐ ์๋ณดํ์ผ๋ฉด, ๋์ ๊บผ์์ ํด๋น ํ ํ ๊ฐ์ ํ ์กฐ๊ฐ ๊ฐ์
- ํด๋น ํ ํ์ ๋ชจ๋ ์๋ณดํ์ฌ 0๊ฐ๋ผ๋ฉด, key ์ญ์
- ์ฒ ์์ ํ ํ ๊ฐ์(unordered_set.size())์ ๋์์ ํ ํ ๊ฐ์(unordered_map.size())๊ฐ ๊ฐ์ผ๋ฉด answer + 1
โ๏ธ์์ค ์ฝ๋ ๋ฐ ๊ฒฐ๊ณผ
#include <vector>
#include <unordered_map>
#include <unordered_set>
using namespace std;
int solution(vector<int> topping) {
int answer = 0;
unordered_map<int, int> youngerBrotherToppings;
youngerBrotherToppings.reserve(topping.size());
for (const auto i : topping)
youngerBrotherToppings[i]++;
unordered_set<int> olderBrotherToppings;
olderBrotherToppings.reserve(topping.size());
for (int i = 0; i < topping.size(); i++) {
olderBrotherToppings.insert(topping[i]);
auto toppingIt = youngerBrotherToppings.find(topping[i]);
if (toppingIt == youngerBrotherToppings.end())
continue;
if (toppingIt->second > 0) {
toppingIt->second--;
if(toppingIt->second == 0)
youngerBrotherToppings.erase(topping[i]);
}
if (olderBrotherToppings.size() == youngerBrotherToppings.size())
answer++;
}
return answer;
}
728x90
๋ฐ์ํ
'๐คAlgorithm > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Programmers] Lv2. ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ | C++ (0) | 2023.06.09 |
---|---|
[Programmers] Lv2. ์์ ์ต๋ํ | C++ (0) | 2023.06.08 |
[Programmers] Lv2. ๋ฆฌ์ฝ์ณ ๋ก๋ด | C++ (0) | 2023.06.07 |
[Programmers] Lv2. ๊ด๋ฌผ ์บ๊ธฐ | C++ (0) | 2023.06.06 |
[Programmers] Lv2. ๋ง๋ฒ์ ์๋ฆฌ๋ฒ ์ดํฐ | C++ (0) | 2023.06.05 |