t 대신 s를 재사용해도 다시 새로 입력 받는거니 문제없다
map 사용 시 value 값으로 key값을 찾는 방법은 없다. 있어도 너무 긴 연산이 필요하여 알고리즘에 부적합하다
그러므로 value값을 key값으로 갖고 key값을 value 값으로 갖는 새 map을 하나 더 만들어서
2개의 map 으로 사용하여 계산하는 것이 해답이다
c_str 과 atoi 를 통해서 문자열을 숫자로 변환하고 그게 가능한지 불가능하면 0를 반환하게 하는 방법이 쓰였다
문자와 숫자가 섞이지 않은 문자열이므로 가능했으며, 첫 단어가 영문자 or 숫자 로 정해져있기에
문자 0과 숫자 0을 구분해줄 isdigit 을 사용할 필요가 없었는 문제였다
굳이 map을 안쓰고 배열로 풀어보려다가 런타임 오류를 해결못해서 다시 map 으로 만들었다..
#include <bits/stdc++.h>
using namespace std;
int m, n;
map<string, int> map1;
map<int, string> map2;
string s, t;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> m >> n;
for(int i=0; i<m; i++){
cin >> s;
map1[s]=i+1;
map2[i+1]=s;
}
for(int i=0; i<n; i++){
cin >> t;
if(atoi(t.c_str())==0){
cout << map1[t] << "\n";
} else{
cout << map2[atoi(t.c_str())] << "\n";
}
}
return 0;
}
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
백준 1213/c++ )) 팰린드롬 만들기 (0) | 2022.06.15 |
---|---|
백준 9375/c++ )) 패션왕 신해빈 (0) | 2022.06.15 |
[c++] 로또의 최고 순위와 최저 순위 (0) | 2022.06.15 |
백준 2559 수열 문제 개선답 (0) | 2022.06.14 |
백준 2559 수열 문제 오답 분석 (0) | 2022.06.14 |
댓글