๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐฑ์ค€ ๋ฌธ์ œ ํ’€์ด

[๋ฐฑ์ค€] 17219๋ฒˆ_์•Œ๊ณ ๋ฆฌ์ฆ˜_์ž๋ฃŒ๊ตฌ์กฐ_๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ

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);

์ด ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฃผ์†Œ์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ๋‹ค.

https://blog.naver.com/yangnony01/222242242475

 

[๋ฐฑ์ค€] 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;
}