Algorithm/BOJ

[BOJ] #1620 나는야 포켓몬 마스터 이다솜

jHoon0223 2023. 10. 30. 15:35

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

 

1620번: 나는야 포켓몬 마스터 이다솜

첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면

www.acmicpc.net


C++에서 기본으로 제공하는 map contaier에 관한 문제이다. 이 문제를 푸는데 있어서 두가지 중요한 관건은, 첫째, 입력받은 변수의 data-type이 int인지 string인지 판별할 수 있는 코드가 삽입되어야 한다. 각각의 케이스를 조건문으로 분기하여 따로따로 처리해주야 한다. 둘째, map에서 find 함수를 활용하여 값들을 찾게되는데, 이때 key와 value간의 관계에 대해 확실하게 머릿속에 정리되어 있어야 한다. find 함수의 경우에는 key값을 활용하여 value값을 찾는 함수인데, 그 반대의 경우에는 활용할수가 없으므로, value값으로 key값을 찾는 방법을 찾아내야 한다. 개인적으로 이 두가지 부분이 이 문제를 푸는데 있어 가장 중요한 걸림돌이라 할 수 있겠다.

#include <iostream>
#include <cctype>
#include <string>
#include <algorithm>
#include <map>
using namespace std;

string PCK[100000];

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

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

    map<string, int> m;
	for (int i = 0; i < N; i++) {
		cin >> PCK[i];
		m.insert(make_pair(PCK[i], i));
	}

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

		// 1. 입력된 것이 숫자인 경우
		if (isdigit(ans[0]) != 0) {
            int idx;
			idx = stoi(ans) - 1;
			cout << PCK[idx] << "\n";
		}

		// 2. 입력된 것이 문자인 경우
		else {
			map<string, int>::iterator iter;
            iter = m.find(ans);
			cout << iter->second + 1 << "\n";
		}
	}

	return 0;
}
728x90

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] #11866 요세푸스 문제0  (0) 2023.11.02
[BOJ] #1269 대칭 차집합  (0) 2023.10.30
[BOJ] #10816 숫자카드2  (0) 2023.10.27
[BOJ] #10815 숫자카드  (0) 2023.10.27
[BOJ] #7785 회사에 있는 사람  (0) 2023.10.27