문제풀이(Problem Solving)

백준, BOJ, 1620번 C++ [CPP]

게임이 더 좋아 2021. 6. 14. 16:26
반응형
728x170

 

쉽지만 손이 좀 가는 문제다.

 

입력이 매우 많기 때문에..

시간초과가 나기 십상이다.

 

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

 


 

#맞은 풀이

#include<iostream>
#include<vector>
#include<string>
#include<map>

using namespace std;

int N,M;

string name[100001]; // 해당 번호에 이름 저장해놓음

map<string, int> m;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> N >> M;
    for(int i = 1; i<=N; i++){
        string s;
        cin >> s;
        name[i] = s; //-> 해당 번호에 이름을 입력
        m.insert(make_pair(s,i));
    }
    
    
    for(int i = 1; i<=M; i++){
        string s;
        int n;
        cin >> s;
        //숫자가 입력됐는지 확인 !!!!!!! 중요
        //문자열 자체는 입력이 안되므로..첫번째 인덱스, char를 빼서 넣음
        if(isdigit(s[0]) == true){
            n = stoi(s); // string to int
            cout << name[n] << '\n';
        }else{
            auto it = m.find(s);
            cout << it->second << '\n';
        }
    }
}

 

굳이 이렇게 풀지 않아도 된다.

다만 인덱스와 이름을 둘다 사용할 수 있어야 하기에..

map을 이용했다.

양이 10만개가 넘기 때문이기도 했고..

숫자는 배열에 이름을 저장

map은 이름을 이용하여 index를 불러내고

그냥 2번 일을 하였다.

 

나쁘진 않았다.

 

728x90
반응형
그리드형

'문제풀이(Problem Solving)' 카테고리의 다른 글

백준, BOJ, 11724번 C++ [CPP]  (0) 2021.06.14
백준, BOJ, 1764번 C++ [CPP]  (0) 2021.06.14
백준, BOJ, 1074번 C++ [CPP]  (0) 2021.06.14
백준, BOJ, 1780번 C++ [CPP]  (0) 2021.06.14
백준, BOJ, 1992번 C++ [CPP]  (0) 2021.06.14