https://www.acmicpc.net/problem/10546
10546번: 배부른 마라토너
문제 마라토너라면 국적과 나이를 불문하고 누구나 참가하고 싶어하는 백준 마라톤 대회가 열린다. 42.195km를 달리는 이 마라톤은 모두가 참가하고 싶어했던 만큼 매년 모두가 완주해왔다. 단, 한 명만 빼고! 모두가 참가하고 싶어서 안달인데 이런 백준 마라톤 대회에 참가해 놓고 완주하지 못한 배부른 참가자 한 명은 누굴까? 입력 첫째 줄에는 참가자 수 N이 주어진다. (1 ≤ N ≤ 105) N개의 줄에는 참가자의 이름이 주어진다. 추가적으로 주어지는
www.acmicpc.net
map을 이용한 문제다. 이미 있는 key값이면 value를 증가시키고 존재하지 않는 key값이면 value를 새롭게 1로 갱신한다.
find는 찾는 값이 없으면 해당 iterator의 end를 반환한다.
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main() {
int n; //총 인원
map<string, int> mp; //map을 이용하여 구현, 이름(string)은 key 값, 이름 출현 횟수(int)는 value 값
cin >> n; //n명의 인원을 입력
//n명의 명단을 입력
for (int i = 0; i < n; i++) {
string s;
cin >> s;
if (mp.find(s) == mp.end()) { //find결과 찾는 값이 없으면
mp[s] = 1; //새로운 key값을 추가
}
else { //이미 있는 값이면
mp[s]++; //value를 증가
}
}
//n명 중 한 명 빼고 다 들어와서 n - 1번 반복
for (int i = 0; i < n - 1; i++) {
string s;
cin >> s;
mp[s]--; //이미 있는 이름이면 -1을 한다.
}
map<string, int>::iterator iter; //iterator를 이용해 map을 순회
for (iter = mp.begin(); iter != mp.end(); iter++) {
if ((*iter).second == 1) { //한 명이라도 해당 key값에 value가 남아 있으면
cout << (*iter).first; //key값을 출력
return 0;
}
}
}'백준' 카테고리의 다른 글
| 백준15900 - 나무탈출 (0) | 2019.07.23 |
|---|---|
| 백준15686 - 치킨배달 (0) | 2019.07.23 |
| 백준3184 - 양 (0) | 2019.07.20 |
| 백준1032 - 명령 프롬프트 (0) | 2019.07.20 |
| 백준1735 - 최단경로 (0) | 2019.07.19 |