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

EHminShoov2J·2023년 9월 7일
0

CPP/코딩테스트

목록 보기
19/25
post-thumbnail

문제 링크 : https://www.acmicpc.net/problem/1620

문자열을 숫자로 바꾸기

atoi(s.c_str())

위의 코드를 통해서 진행 문자열을 숫자로 바꿀수 있다.
만약 문자열이 숫자로 변환되지 못하는 경우, 0이 return 된다.

unordered_map

기존의 map은 자동정렬에 의해서 find 탐색시간이 O(longN)이다. 하지만 unordered_map을 사용하면 O(1)에 가능!

추가적으로 아래와 같이 검색해야 하는 것을 잊지 말자.

if(m.find(s) == m.end()){ //map에 없으면 
             cout << p_array[atoi(s.c_str())] << "\n";
             continue;
         }

입출력 속도 향상

사실 이 부분 때문에 계속해서 시간 초과가 발생하였다.
입출력이 빈번하게 발생하는 문제의 경우 아래의 코드를 반드시 추가해 주도록 하자.

ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL); // 이거 차이 엄청 크다

전체 코드

#include <iostream>
#include <map>
#include <string>
#include <unordered_map>

using namespace std;

int M, N;
string p_array[100010];
map<string,int> m;
string s;

int main(){
    ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL); // 이거 차이 엄청 크다

    cin >> N >> M;
    for(int i = 1; i <= N; i++){
        cin >> p_array[i];
        m[p_array[i]] = i;
    }

    // for(int j = 0; j < M; j++){
    //     cin >> s;
    //     if(m.find(s) == m.end()){ //map에 없으면 
    //         cout << p_array[atoi(s.c_str())] << "\n";
    //         continue;
    //     }
    //     else cout << m[s]<< "\n";
    // }

    for(int j = 0; j < M; j ++){
        cin >> s;
        if(atoi(s.c_str()) == 0) cout << m[s] << "\n"; // 문자인경우
        else cout << p_array[atoi(s.c_str())] << "\n";
    }
}

0개의 댓글