1764번 - 듣보잡
map 을 통해서 문제를 풀었다.
while 문 양쪽에서 모두 입력이 될 경우 p[name] 의 값을 하나씩 증가시켜줬다.
그래서 마지막에는 iterator 를 이용해서 그 값이 2인 경우( 즉 , 양쪽에서 나온경우) 의 갯수를 세주고 출력해줬다.
갯수를 먼저 세주느라 for 문을 2개를 썼는데, 그냥 vector 를 선언해서 두번째 while문에서 다시 담아서 출력해도 될 것 같다.
나는 반복자를 숙달하려고 이렇게 풀어봤다.
<정답 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include<iostream> #include<map> #include<string> using namespace std; int main() { int N, M; map<string, int> p; cin >> N >> M; while (N--) { string name; cin >> name; p[name] = 1; } while (M--) { string name; cin >> name; if (p.count(name) != 0) { p[name]++; } else { p[name] = 1; } } map<string, int>::iterator iter; int ans = 0; for (iter = p.begin(); iter != p.end(); iter++) { if ((*iter).second == 2) { ans++; } } cout << ans << endl; for (iter = p.begin(); iter != p.end(); iter++) { if ((*iter).second == 2) { cout << (*iter).first << endl; } } return 0; } | cs |
반응형
'알고리즘 > BOJ' 카테고리의 다른 글
10942번 (0) | 2017.12.21 |
---|---|
11048번 (0) | 2017.12.21 |
7785번 (0) | 2017.12.21 |
11286번(우선순위큐 다시풀기) (0) | 2017.12.21 |
1927번(우선순위 큐 다시풀기) (0) | 2017.12.20 |