제출 코드 (시간초과)
이중 for문 쓰면 시간 초과 날 것 같은데..라고 생각은 하고 있었지만 거의 다 왔는데 다른 방법이 생각이 안나서 일단 제출!!! 하고 보자는 생각으로 제출했다.
물론 결과는 당연하게도 시간초과
ㅋㅋㅋ
c++에서 key 값으로 출력하는 방법을 몰라서 구글링해서 배워왔는데 어차피 통과 못하는 코드였던 것..
#include <bits/stdc++.h>
using namespace std;
int N, M;
map<int, string> mp;
string find_pm, pm;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for(int i = 0; i < N; i++){
cin >> pm;
mp[i] = pm;
}
for(int i = 0; i < M; i++){
cin >> find_pm;
if( atoi(find_pm.c_str()) == 0 ){ // 문자로 들어옴.
// 숫자로 변경해서 출력
for(auto it = mp.begin(); it != mp.end(); it++){
if( it -> second == find_pm ){
cout << (it->first) + 1 << "\n";
break;
}
}
} else { // 숫자로 들어옴, 문자로 변경해서 출력
int idx = atoi(find_pm.c_str());
cout << mp[idx - 1] << "\n";
}
}
return 0;
}
일단 전체적인 로직은 다 짰기 때문에 시간초과 부분만 해결하면 될 것 같아서 솔루션을 찾아봤다.
전체 코드는 안 보고 변수 선언부분만 봤는데 애초에 map을 2번 쓰면 해결될 문제였다는 것을 알게 되었다. (왜 이거 생각 못했지..?)
그래서 해당 부분만 수정해서 바로 제출했다.
리트라이! 성공한 코드
#include <bits/stdc++.h>
using namespace std;
int N, M;
map<int, string> mp;
map<string, int> mp2; // 1개 더 만듦..
string find_pm, pm;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
for(int i = 0; i < N; i++){
cin >> pm;
mp[i] = pm;
mp2[pm] = i;
}
for(int i = 0; i < M; i++){
cin >> find_pm;
if( atoi(find_pm.c_str()) == 0 ){ // 문자로 들어옴.
// 숫자로 변경해서 출력
cout << mp2[find_pm] + 1<< "\n";
} else { // 숫자로 들어옴, 문자로 변경해서 출력
int idx = atoi(find_pm.c_str());
cout << mp[idx - 1] << "\n";
}
}
return 0;
}
진짜 맨 처음에는 배열로 작성했다가 아무리 생각해도 key : value로 가야될 것 같아서 map으로 했다가 다시 배열로 바꿨다가 ㅋㅋㅋ 갈팡질팡 하다가 결국 map이 맞는 것 같아서 map으로 시도했는데 시간초과
를 맛보고 솔루션 코드의 전역 변수 선언 부분에 map 2개 선언한거 보고 깨달아 성공한 문제.
굉장히 간단한 문제였다.