Koala - 11기/기초 알고리즘 스터디

[백준 / C++] 17219: 비밀번호 찾기

님남누 2023. 7. 21. 17:01

문제

https://www.acmicpc.net/problem/17219

 

17219번: 비밀번호 찾기

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

www.acmicpc.net


문제 설명

사이트 주소와 해당 사이트의 계정 비밀번호를 입력한다.

찾고자 하는 비밀번호를 등록한 사이트 주소를 입력하면 비밀번호가 출력되게끔 만들면 된다.


코드

#include <iostream>
#include <map>

using namespace std;

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    map <string, string> stg;

    int N, M; cin >> N >> M;

    for (int i = 0; i < N; i++) {
        string address, password;
        cin >> address >> password;

        stg.insert({address, password});
    }

    for (int i = 0; i < M; i++) {
        string name;
        cin >> name;

        if (stg.find(name) != stg.end()) {
            cout << stg[name] << '\n';
        }
    }
}

코드 설명

map STL을 사용했다. 그 이유는 map이 키와 값을 한 쌍으로 갖는다는 것과 중복을 방지해주는 특징이 있기 때문이다.

사이트 주소와 비밀번호를 입력받으면 {사이트 주소, 비밀번호} 순으로 페어를 만들어 map에 삽입한다.

이후 비밀번호를 찾고자 할 때, map의 함수인 find를 사용해 비밀번호를 출력한다.


추가로 생각해 볼 것

중복을 자동으로 방지해주는 점에서 map을 사용했는데, map은 공간을 많이 차지한다.

그래서 vector와 pair 조합을 사용하는 것이 공간복잡도 면에서 더 좋아보인다.

이후 문제를 다시 풀게 된다면 vector와 pair 조합으로 풀어보는 것도 괜찮을 듯 하다.