문제

https://codeforces.com/problemset/problem/4/C

풀이

데이터베이스를 흉내내는 문제이다. n 개의 스트링이 입력으로 주어지고(각각의 스트링을 name 이라고 한다), 그 스트링이 만약 등록된 이름이면 이름 + 번호를 붙여서 출력하고 등록되지 않은 이름이면 'OK'를 출력하면 된다.

딕셔너리를 쓰면 가장 쉽게 해결 가능하다. 딕셔너리에 name을 키로, 그리고 등장한 횟수를 값으로 저장하면 쉽게 존재 판별과 번호 붙이기 둘 다 가능하다.

코드

#include <iostream>
#include <map>

int main() {
    int n;
    std::cin >> n;
    std::map<std::string, int> db;
    while (n--) {
        std::string name;
        std::cin >> name;
        if (db.find(name) != db.end()) {
            db[name]++;
            std::cout << name << db[name] << std::endl;
        } else {
            db[name] = 0;
            std::cout << "OK" << std::endl;
        }
    }
    return 0;
}