[๋ฌธ์ ]
์ฒซ์งธ ์ค์๋ ๋๊ฐ์ ์๋ก๋์ด ์๋ ํฌ์ผ๋ชฌ์ ๊ฐ์ N์ด๋ ๋ด๊ฐ ๋ง์ถฐ์ผ ํ๋ ๋ฌธ์ ์ ๊ฐ์ M์ด ์ฃผ์ด์ง๋ค.
N๊ณผ M์ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 100,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ํฌ์ผ๋ชฌ์ ๋ฒํธ๊ฐ 1๋ฒ์ธ ํฌ์ผ๋ชฌ๋ถํฐ N๋ฒ์ ํด๋นํ๋ ํฌ์ผ๋ชฌ๊น์ง ํ ์ค์ ํ๋์ฉ ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ๋ค.
๊ทธ ๋ค์ ์ค๋ถํฐ ์ด M๊ฐ์ ์ค์ ๋ด๊ฐ ๋ง์ถฐ์ผํ๋ ๋ฌธ์ ๊ฐ ์ ๋ ฅ์ผ๋ก ๋ค์ด์จ๋ค.
์ต์ข ์ ์ผ๋ก ์ ๋ ฅ์ผ๋ก ์ซ์๊ฐ ๋ค์ด์๋ค๋ฉด ๊ทธ ์ซ์์ ํด๋นํ๋ ํฌ์ผ๋ชฌ์ ์ด๋ฆ์, ๋ฌธ์๊ฐ ๋ค์ด์์ผ๋ฉด ๊ทธ ํฌ์ผ๋ชฌ์ ์ด๋ฆ์ ํด๋นํ๋ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ค.
[ํด๊ฒฐ๋ฐฉ๋ฒ]
*1์ฐจ์๋:
ํฌ์ผ๋ชฌ ๋๊ฐ์ map<int, string> mp; ๋ก ํํํ๋ค.
๋ฌธ์ ๊ฐ string์ธ์ง ์ซ์์ธ์ง ํ๋ณํ ํ, string์ด๋ฉด map value๋ก key ๋ฅผ ์ฐพ๋๋กํ๊ณ int๋ฉด key๋ก value๋ฅผ ์ฐพ๋๋ก ๊ตฌํํ๋ค.
=> ์๊ฐ์ด๊ณผ๋ก ์คํจ.
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
int mapSize, quizNum;
string input;
map<int, string> mp;
cin >> mapSize >> quizNum;
for (int i = 1; i <= mapSize; i++) {
cin >> input;
mp.insert({ i, input });
}
for (int i = 0; i < quizNum; i++) {
cin >> input;
//๋ฌธ์
if (atoi(input.c_str()) == 0) {
for (auto& it : mp) {
if (it.second == input) {
cout << it.first << "\n";
}
}
}
//์ซ์
else {
cout << mp[stoi(input)] << "\n";
}
}
return 0;
}
๋ฌธ์ ๋ฅผ ํธ๋ 2๋ฒ์งธ for๋ฌธ์์ value๋ก key ๊ฐ์ ์ฐพ์ ๋ map์ด iterator ์ํ๋ฅผ ํด์ผํ๋ฏ๋ก ์ต์ ์ ๊ฒฝ์ฐ n*n = 100,000*100,000 = 10,000,000,000์ ์๊ฐ๋ณต์ก๋๊ฐ ๋ฐ์ํ ์ ์๋ค. 100์ตใ . ์ ํ์๊ฐ์ด 1์ด์ด๋ฏ๋ก 1์ต ๋ฏธ๋ง์ด ๋์์ผํ๋๋ฐ ๋น์ฐํ ์๊ฐ์ด๊ณผ์ด๋ค.
*2์ฐจ์๋: ๋ต์์ฒ๋ผ map๊ณผ array ์๋ฃ๊ตฌ์กฐ 2๊ฐ ์ฌ์ฉํ๊ธฐ.
string ์ผ๋ก int ๋ฅผ ์ฐพ์ ๋,
map ์ ์๊ฐ๋ณต์ก๋๋ O(logN) / array ์ ์๊ฐ๋ณต์ก๋๋ O(n)์ด๋ค. (map ์ด ๋ ๋๋ธ๋ํธ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ํ์ํด์ O(logN) ์ด ๊ฑธ๋ฆฐ๋ค.)
int ๋ก string ์ ์ฐพ์ ๋,
map ์ ์๊ฐ๋ณต์ก๋๋ O(logN) / array ์ ์๊ฐ๋ณต์ก๋๋ O(1) ์ด๋ค. ex) arr[1] = "Bulbasaur"
๋ฐ๋ผ์, array ์ map ์๋ฃ๊ตฌ์กฐ ๋๊ฐ๋ฅผ ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋๋ฅผ ์ต์ข ์ ์ผ๋ก O(N)์ผ๋ก ์ค์ผ ์ ์๋ค.
[์์๋ ๊ฒ]
* ์ ๋ ฅ๋ฐ์ ๊ฐ์ด ๋ฌธ์์ด์ธ์ง ํ๋ ํ๋ ํจ์: atoi(s.c_str()). ๊ฐ์ด 0์ด๋ฉด ๋ฌธ์์ด, 0์ด ์๋๋ฉด ์ซ์์ด๋ค.
https://cplusplus.com/reference/string/string/c_str/
*๋ฌธ์์ด -> ์ ์๋ก ๋ฐ๊พธ๋ ํจ์: stoi(s)
*map ์์ value ๊ฐ์ผ๋ก key ๊ฐ ์ฐพ๋ ๋ฒ: ๋ฐ๋ณต๋ฌธ iterator ๋ฅผ ์ด์ฉํด์ ์ฐพ์ ์ ์๋ค. ์ด ์๋ 3๊ฐ์ง์ธ๋ฐ ๊ธฐ์ต๋๋๊ฑฐ ์ฐ์!
for (auto it = map.begin(); it != map.end(); it++) {
if (it->second == target) {
keys.push_back(it->first);
}
}
for (auto& it : mp) {
if (it.second == target) {
cout << it.first << "\n";
}
}
for (pair<int, string> p : mp) {
if (p.second == target) {
cout << p.first << "\n";
}
}
[์ฝ๋]
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int mapSize, quizNum;
string input;
cin >> mapSize >> quizNum;
map<string, int> mp;
vector<string> v(mapSize + 1, "");
//๋๊ฐ ์ ๋ณด
for (int i = 1; i <= mapSize; i++) {
cin >> input;
mp.insert({ input, i });
v[i] = input;
}
//๋ฌธ์
for (int i = 0; i < quizNum; i++) {
cin >> input;
//๋ฌธ์
if (atoi(input.c_str()) == 0) {
cout << mp[input] << "\n";
}
//์ซ์
else {
cout << v[stoi(input)] << "\n";
}
}
return 0;
}
์ฐธ๊ณ ๋ก
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
์ ์ฝ๋๋ฅผ ์ ๋ ฅํด์ค์ผ ์๊ฐ์ด๊ณผ๊ฐ ํด๊ฒฐ๋๋ค. ๊ด๋ จ ๋ด์ฉ์ ์๋ ํฌ์คํ ์ฐธ๊ณ .
https://i-believe-in-me.tistory.com/387
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][BOJ] 1931 ํ์์ค ๋ฐฐ์ :: ๋ผ์ธ ์ค์ํ (0) | 2024.05.15 |
---|---|
[C++][BOJ] 2109 ์ํ๊ฐ์ฐ :: ๊ทธ๋ฆฌ๋(Greedy) (0) | 2024.05.14 |
[C++][Baekjoon][๋ฌธ์์ด] 2559 ์์ด (feat. prefix sum) (0) | 2024.04.13 |
[C++][Baekjoon][๋ฌธ์์ด] 9996๋ฒ ํ๊ตญ์ด ๊ทธ๋ฆฌ์ธ ๋ ์๋ฒ์ ์ ์ํ์ง (1) | 2024.03.31 |
[C++][Baekjoon][๋ฌธ์์ด] 11655๋ฒ ROT13 (0) | 2024.02.17 |