[백준 / 1620 / C++] 나는야 포켓몬 마스터 이다솜

Park·2023년 9월 22일
0

코딩테스트 - Week1

목록 보기
8/15

1. 문제 접근

  • 해당 문제는 string형을 key, int형을 value로 갖는 map과 int를 key, string을 value로 갖는 map을 통해 풀어야 함 => O(NlogN)으로 풀 수 있음
  • 아니면 숫자를 통해 문자열을 찾는 경우는 배열을 활용해 풀 수 있음

2. 시행착오

  • 입력이 엄청 많이 들어오는 경우(약 20만) 시간초과 문제를 겪음

3. 코드 및 풀이

  • 해당 코드를 통해 입출력의 속도를 빨리 할 수 있다.
  • 참고 : https://jaimemin.tistory.com/1521
  • 주의사항
    • c의 stdio 버퍼와 cpp의 iostream 버퍼 동기화를 하지 않았기 때문에 cinscanf, getchar 등을 함께 쓸 수 없음
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

3.1 풀이

  • 먼저 입력으로 들어오는 N개의 포켓몬에 대한 정보를 string_mapint_map에 넣음
  • 그 후 M개의 문제가 들어오고, 각각의 입력이 숫자인지, 문자인지 판별하기 위해 atoi() 함수를 사용해 풀었음
    • 입력이 문자이면 string 형을 key로 갖는 string_map을 통해 값을 출력
    • 입력이 숫자이면 int형을 key로 갖는 int_map을 통해 갑승ㄹ 찾음
#include <bits/stdc++.h>
using namespace std;

map<int, string> number_map;
map<string, int> string_map;

int n, m;
string tmp;

int main(){

    // 0. (IMPORTANT) preventing time limit
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    // 1. input n, m
    cin >> n >> m;

    // 2. input and numbering N poketmons
    for(int i = 1; i <= n; i++){ 
        cin >> tmp;
        number_map[i] = tmp;
        string_map[tmp] = i;
    }

    // 3. input n question and solve
    for(int i = 0; i < m; i++) {
        cin >> tmp;
        int q_int = atoi(tmp.c_str());
        // 3.1 question is INT
        if (q_int == 0) cout << string_map[tmp] << '\n';
        else cout << number_map[q_int] << '\n';
    }
    return 0;
}

Reference

profile
안녕하세요!

0개의 댓글