알고리즘 문제 해결/BOJ

[자료구조, 맵] BOJ 1620 나는야 포켓몬 마스터 이다솜

jmkimmessi 2021. 9. 23. 00:00
반응형

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

 

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

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

www.acmicpc.net

문제보다 입력 출력이 더 중요하다.

 

문제 해결 알고리즘

 

맵을 사용해서 키값을 각각 문자열과 숫자에 부여한 맵을 두개 만들어서 입력에 포켓몬 이름이 나오든 숫자가 나오든 바로 출력 할 수 있게 한다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int main(){
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  int N, M; cin >> N >> M;

  map<int, string> m1;
  map<string, int> m2;

  for(int i=0;i<N;i++){
    string str; cin >> str;
    m1.insert(pair<int, string>(i+1, str));
    m2.insert(pair<string, int>(str, i+1));
  }

  for(int i=0;i<M;i++){
    string str; cin >> str;
    if(isdigit(str[0])) cout << m1[stoi(str)] << '\n';
    else cout << m2[str] << '\n';
  }
}


메모

계속 시간 초과가 나길래 봤는데 아래의 코드를 입력하지 않아서 틀린 것이었다.

cin.tie(0);
ios_base::sync_with_stdio(false);

cout, cin은 입출력이 printf, scanf보다 두 배정도 느려서 위의 코드를 입력해주어야 시간초과가 나지 않는다.

반응형