https://www.acmicpc.net/problem/17219
17219๋ฒ: ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ
์ฒซ์งธ ์ค์ ์ ์ฅ๋ ์ฌ์ดํธ ์ฃผ์์ ์ N(1 ≤ N ≤ 100,000)๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ์ผ๋ ค๋ ์ฌ์ดํธ ์ฃผ์์ ์ M(1 ≤ M ≤ 100,000)์ด ์ฃผ์ด์ง๋ค. ๋๋ฒ์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ์ค์ ์ฌ์ดํธ ์ฃผ์์ ๋น๋ฐ๋ฒ
www.acmicpc.net

์๋ฃ๊ตฌ์กฐ์ ํธ๋ฆฌ์ ์๋ฏธ
์๋ฃ๊ตฌ์กฐ๋, ์๋ฃ๋ค์ ์ ๋ฆฌํ์ฌ ๋ณด๊ดํ๋ ์ฌ๋ฌ ๊ฐ์ง ๊ตฌ์กฐ์ธ๋ฐ ๊ทธ ์๋ก ์ ์, ์ค์, ๋ฆฌ์คํธ, ํธ๋ฆฌ ๋ฑ์ด ์๋ค.
17219๋ฒ_๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ๋ฌธ์ ๋ ํธ๋ฆฌ๋ผ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
ํธ๋ฆฌ๋, ๋๋ฌด๋ฅผ ๊ฑฐ๊พธ๋ก ์ธ์๋์ ๊ฒ์ฒ๋ผ ์๊ธด ๊ทธ๋ํ์ธ๋ฐ, ์๋ฃ๋ฅผ ์ ํด์ง ๋ฐฉ์์ ๋ฐ๋ผ ๋ถ๋ฅํ์ฌ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ผ๋ ฌ๋ก ์๋ฃ๋ฅผ ์ ์ฅํ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ณด๋ค ๊ฒ์์ด ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
๋จ, ์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ์๋ฃ๋ฅผ ์ฝ์ , ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋ฆฌ์คํธ๋งํผ ๊ฐ๋จํ์ง ์๋ค.
์ค๋ต ์ฝ๋
17219๋ฒ_๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ ๋ฌธ์ ๋ map์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
map์ ๋ํด ๋ชจ๋ฅผ ๋, ๋๋ ์ด ๋ฌธ์ ๋ฅผ ๋ฐฐ์ด์ ์ด์ฉํด์ ํ์๋ค.
ํ์ง๋ง, 100,000๊ฐ์ ์ฃผ์์ 100,000๊ฐ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ๊ธฐ์๋ ๋งค์ฐ ๋นํจ์จ์ ์ธ ํ๋ก๊ทธ๋จ์ด์๋ค.
์๋ฃ์ ์๋ฅผ 100,000๊ฐ๊ฐ ์๋ 10,000๊ฐ๋ก ํ๋ฉด ์ถ๋ ฅ์ ์ ๋๋ก ๋์์ง๋ง, ๋ฐฑ์ค ์ฑ์ ์์๋ ํ๋ ธ๋ค๊ณ ๋์๋ค.
๋์ ์ค๋ต ์ฝ๋ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
//์ค๋ต ์ฝ๋ฉ
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
cin.tie(NULL);
ios::sync_with_stdio(false);
int n, m;
string site, password, find;
cin >> n >> m;
string siteList[100000], passwordList[100000], findList[100000];
for (int i = 0; i < n; i++) {
cin >> site >> password;
siteList[i] = site;
passwordList[i] = password;
}
for (int i = 0; i < m; i++) {
cin >> find;
findList[i] = find;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (findList[i] == siteList[j]) cout << passwordList[j] <<"\n";
}
}
return 0;
}
map์ ๋ํ ๋ด์ฉ์ ์ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
map์ ๋ํ ๋ ์์ธํ ๋ด์ฉ์ด ๋ด๊ฒจ ์์ผ๋ฏ๋ก, map์ ๋ํด ๋ ์๊ณ ์ถ๋ค๋ฉด ์ ์ฌ์ดํธ๋ฅผ ์ถ์ฒํ๋ค.
map
map์ ์๋ฃ๊ตฌ์กฐ๋ ํธ๋ฆฌ์ด๋ค.
map์ ํ์ด์ฌ์์์ ๋์ ๋๋ฆฌ์ ๋น์ทํ๋ค. ํ์ด์ฌ์์ ๋์ ๋๋ฆฌ์ ๋ํด ๋ฐฐ์ ๋ ์ ์ด ์์ด์ map๋ ์ฝ๊ฒ ์ดํดํ ์ ์์๋ค.
map์ key์ value๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
key์ value๊ฐ ์์์ ํํ๋ก ์ ์ฅ๋๋ค.
์๋ฅผ ๋ค์ด key๊ฐ ํ๋ฒ์ด๊ณ value๊ฐ ์ด๋ฆ์ด๋ผ๋ฉด, (20200202, ์์ฐ๋)์ฒ๋ผ ํ ์์ผ๋ก ์ ์ฅ๋๋ค.
key๋ value๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ฏธ๊ณ , value๋ ์ ์ฅํ ์๋ฃ์ด๋ค.
key๋ ์ค๋ณต๋์ง ์๋ ๊ณ ์ ํ ๊ฐ์ด์ด์ผ ํ๋ค. (๋ง์ฝ ์ค๋ณต์ ํ์ฉํ๊ณ ์ถ๋ค๋ฉด, multimap์ด ์๋ค.)
โ map์ ์ฌ์ฉํ ๋
- ์ ๋ ฌํด์ผ ํ ๋
- ๋ง์ ์๋ฃ๋ฅผ ์ ์ฅํ๊ณ , ๊ฒ์์ ๋นจ๋ฆฌํด์ผ ํ ๋
- ์ฝ์ , ์ญ์ ๋ฅผ ๋น๋ฒํ๊ฒ ํ์ง ์์๋ ๋ ๋
โ map์ ์ฐ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
#include <map>
๋ผ์ด๋ธ๋ฌ๋ฆฌ(library)๋ ๋ง ๊ทธ๋๋ก ๋์๊ด์ด๋ผ๋ ์๋ฏธ์ธ๋ฐ,
์ฃผ๋ก ๋์๊ด์ ๋ชจ๋ฅด๋ ์ง์์ ๊นจ๋ซ๊ธฐ ์ํด, ์ ๋ฌธ๊ฐ๋ก๋ถํฐ ์ฐ์ธ ๋ฌธ์๋ฅผ ์ฝ๊ธฐ ์ํจ์ด๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก, ๋ค๋ฅธ ์ฌ๋๋ค์ ์ง์์ผ๋ก๋ถํฐ ๋ง๋ค์ด์ง ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ณ , ๊ฐ๋ฐ ์๊ฐ์ ๋จ์ถํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
๋ด๊ฐ ๋ง๋๋ ์ฝ๋๋ค์ ๊ฑฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถฉ๋ถํ ํ์ฉํ ์ ์๋ ๋ฅ๋ ฅ์ ๋ ํค์ธ ๊ฒ์ด๋ค.
โ map ์ ์ธ ํ์
map<key์ type, value์ type>๋ณ์ ์ด๋ฆ;
//์)
map<int,int>map1;
map<int, string>map2;
map<string, string>map3;
โ map ์๋ฃ ์ถ๊ฐ ํ์
๋ณ์ ์ด๋ฆ[key] = value;
+) ํน์ ์์น์ ์ถ๊ฐํ ๋ :
๋ณ์ ์ด๋ฆ. insert(map<key์ type, value์ type>::value_type(key์ ๋ฃ์ ์์, value์ ๋ฃ์ ์์));
โ map ๋ฉค๋ฒ ํจ์
๋ฉค๋ฒ
|
์ค๋ช
|
begin
|
์ฒซ ๋ฒ์งธ ์์์ ๋๋ค ์ ๊ทผ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
|
clear
|
์ ์ฅํ๊ณ ์๋ ๋ชจ๋ ์์๋ฅผ ์ญ์ ํ๋ค.
|
empty
|
์ ์ฅํ๊ณ ์๋ ์์๊ฐ ์์ผ๋ฉด true๋ฅผ ๋ฐํํ๋ค.
|
End
|
๋ง์ง๋ง ์์ ๋ค์์(๋ฏธ ์ฌ์ฉ ์์ญ) ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
|
erase
|
ํน์ ์์น์ ์์๋ ์ง์ ๋ฒ์์ ์์๋ค์ ์ญ์ ํ๋ค.
|
Find
|
key์ ์ฐ๊ด๋ ์์์ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
|
insert
|
์์๋ฅผ ์ถ๊ฐํ๋ค.
|
lower_bound
|
์ง์ ํ key์ ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ํด๋น ์์น์ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
|
operator[]
|
์ง์ ํ key ๊ฐ์ผ๋ก ์์๋ฅผ ์ถ๊ฐํ๊ณ ์ ๊ทผํ๋ค.
|
rbegin
|
์ญ๋ฐฉํฅ์ผ๋ก ์ฒซ ๋ฒ์งธ ์์์ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
|
rend
|
์ญ๋ฐฉํฅ์ผ๋ก ๋ง์ง๋ง ์์ ๋ค์์ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
|
size
|
์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
|
upper_bound
|
์ง์ ํ key ์์๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด ํด๋น ์์น ๋ค์ ์์น์ ๋ฐ๋ณต์ ๋ฐํํ๋ค.
|
์ฝ๋ ์ค๋ช
1. ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
#include <cstring>
๋ฌธ์์ด์ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
#include <map>
mapํจ์๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. map์ ๋ํด์๋ ์์์ ์ค๋ช ํ๋ค.
2. ์ ์ถ๋ ฅ ์๊ฐ์ ์ค์ด๊ธฐ ์ํ ํจ์
cin.tie(NULL);
ios::sync_with_stdio(false);
์ด ๋ด์ฉ์ ์๋ ์ฃผ์์์ ์์ธํ ์ค๋ช ํ๋ค.
[๋ฐฑ์ค] 15552๋ฒ_๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐ_ for ๋ฌธ_๋น ๋ฅธ A+B
๋ฌธ์ ...cin.tie(NULL)๊ณผ sync_with_stdio(false)๋ฅผ ๋ ๋ค ์ ์ฉํด ์ฃผ๊ณ , endl ๋์ ๊ฐํ๋ฌธ์(\n)๋ฅผ ์ฐ...
blog.naver.com
3. map
map<string, string> site_password;
map<key์ type, value์ type>๋ณ์ ์ด๋ฆ;
site_password๋ผ๋ ๋ณ์์ string type์ key์ string type์ value๋ฅผ ์ง์ ํ๋ค.
4. site์ password ์ ๋ ฅ ๋ฐ๊ธฐ
site_password[site] = password;
//site_password.insert({ site,password });
site_password๋ผ๋ ๋ณ์์ site์ password๋ฅผ ์ ์ฅํ๋ค.
5. site ์ฐพ๊ธฐ
for (int i = 0; i < m; i++) {
cin >> findSite;
cout << site_password[findSite] << "\n";
}
์ฌ์ฉ์๊ฐ ์ฐพ๊ณ ์ถ์ site์ ๊ฐ์ m๋งํผ ์ ๋ ฅ์ ๋ฐ๋๋ค.
site_password[findSite]
๋ฅผ ํตํด ์ ๋ ฅ๋ฐ์ site์ password๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต ์ฝ๋
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
int main()
{
cin.tie(NULL);
ios::sync_with_stdio(false);
int n, m;
string site, findSite, password;
cin >> n >> m;
map<string, string> site_password;
for (int i = 0; i < n; i++) {
cin >> site >> password;
site_password[site] = password;
//site_password.insert({ site,password });
}
for (int i = 0; i < m; i++) {
cin >> findSite;
cout << site_password[findSite] << "\n";
}
return 0;
}
'๋ฐฑ์ค ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2309๋ฒ_๋ธ๋ฃจํธ ํฌ์ค_์ผ๊ณฑ ๋์์ด (0) | 2022.06.11 |
---|---|
[๋ฐฑ์ค] 1991๋ฒ_์๊ณ ๋ฆฌ์ฆ_ํธ๋ฆฌ ์ํ (0) | 2022.06.11 |
[๋ฐฑ์ค] 10845๋ฒ_์๊ณ ๋ฆฌ์ฆ_์๋ฃ๊ตฌ์กฐ_ํ (0) | 2022.06.11 |
[๋ฐฑ์ค] 10828๋ฒ_์๊ณ ๋ฆฌ์ฆ_์๋ฃ๊ตฌ์กฐ_์คํ (0) | 2022.06.11 |
[๋ฐฑ์ค] 15552๋ฒ_๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐ_ for ๋ฌธ_๋น ๋ฅธ A+B (0) | 2022.06.11 |