이 문제를 보고 든 생각은 map 이나 vetor를 이용하여 풀어야 겠다 라고 생각하였다.
구현 자체는 어렵지 않았지만 생각해야 할 것이 시간초과를 하지 않게 해야 하는데
vector나 map 을 이용할때 for 문을 가지고 첫번째 요소부터 마지막 요소까지 확인하는 것은
매우 시간(O(N))을 많이 잡아먹는다.
따라서 다른 방법을 찾아야 했는데
map 을 두개 사용하거나 map 하나 또는 배열을 이용하여 푸는 것 이였다
두가지 다 사용하여 풀었으나 여기엔 map 과 배열을 이용한 풀이를 적어놓았다.
ios_base::sync_with_stdio(0);
cin.tie(NULL);
이 문장을 왜 쓰는줄 몰랐는데
찾아 보니까 C++ 알고리즘을 사용할 때 시간을 줄일 수 있다고 한다.
(계속 똑같은 코드여도 위에 것을 쓰지 않으면 시간 초과가 뜬다...)
코드를 항상 간결하고 보기 편하게 쓰고 싶어도 쉽지 않고 다른 사람들의 풀이를 보면 나보다 더욱 간결하고 깔끔하게 푼다.. 깔끔하고 간결하게 짤 수 있도록 노력하자
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(NULL);
int num1, num2;
cin >> num1 >> num2;
map<string,int> pocket;
string arr[100001];
string name;
int num = 1;
while (num1--) {
cin >> name;
pocket.insert(pair<string,int>(name, num));
arr[num] = name;
num++;
}
string c;
while (num2--) {
cin >> c;
if (c.at(0) - '0' > 9) {//문자일때
cout << pocket[c] << "\n";
}
else {//숫자일때
cout << arr[stoi(c)] << "\n";
}
}
}
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 1389번 문제풀이 (0) | 2021.02.14 |
---|---|
[C++] 백준 1764번 문제풀이 (0) | 2021.02.11 |
[C++] 백준 1697번 문제풀이 (0) | 2021.02.11 |
[C++] 백준 1463번 문제풀이 (0) | 2021.02.09 |
[C++]백준 1074 번 문제 풀이 (0) | 2021.02.09 |