www.acmicpc.net/problem/1620

 

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

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

www.acmicpc.net

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

int n, m;
// 숫자 인덱스를 이용해 문자열을 가져오기 위한 벡터
vector<string> v;
// 문자열을 키로 사용해 숫자를 가져오기 위한 맵(딕셔너리)
map<string, int> ma;

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

  cin >> n >> m;
  int ansIdx;
  string ansStr;
  string name;
  // 포켓몬들 정보 입력 부분
  for(int i = 0 ; i < n ; i++)
  {
    cin >> name;
    v.emplace_back(name);
    ma.insert(pair<string, int>(name, i+1));
  }

  for(int i = 0 ; i < m ; i++)
  {
    cin >> ansStr;
    // 만약 입력된 문자열이 숫자라면
    if(atoi(ansStr.c_str()))
    {
      // 숫자로 바꿔준다음 해당 인덱스로 값을 출력
      ansIdx = stoi(ansStr);
      cout << v[ansIdx - 1] << '\n';
    }
    // 숫자가 아닐 경우 맵의 키값으로 사용하여 번호 출력
    else
    {
      cout << ma[ansStr] << '\n';
    }
  }
}

 

[Try]

1. 이건 누가 봐도 딕셔너리다!! (map)

     생각해보니 파이썬에서나 딕셔너리지 c++ 에서는 vector 로 저장해도 별 다를게 없어 보인다. 시간제한이 2초인데도 시간초과

2. 벡터에서 find 로 하나하나 찾는게 시간이 오래 걸리는 것 같아서, 인덱스로 문자열을 출력하는 벡터와, 문자열로 인덱스를 출력

     하는 맵을 두 개 설정해서 따로 처리해줬다.

 

[Point]

1. map 자료구조

2. <iostream> 에 포함되어있는 atoi(), <string> 의 stoi()

3. <algorithm> 의 find(), distance()

4. 굳이 문자열을 atoi 비교할 필요 없이 문자열의 첫 인덱스가 숫자인지만 확인해도 됐다.

 

[More]

1. 컨테이너와 알고리즘, 반복자간의 관계와 개념 명확히 잡아놓을 것.

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

[백준] 1931.cpp : 회의실배정  (0) 2020.05.27
[백준] 11724.cpp : 연결 요소의 개수  (0) 2020.05.27
[백준] 11726.cpp : 2 x n 타일링  (0) 2020.05.26
[백준] 4948.cpp : 베르트랑 공준  (0) 2020.05.26
[백준] 11723.cpp : 집합  (0) 2020.05.26

+ Recent posts