728x90
유형 | 난이도 | 완료일 | 링크 | 특이사항 |
문자열 | 실버4 | 23/03/25 | https://www.acmicpc.net/problem/17219 |
내 코드
#include <iostream>
#include <string>
#include <map>
using namespace std;
map<string, string> memo;
string s1, s2;
int main(void)
{
ios::sync_with_stdio(false); cin.tie(NULL);
int n, m;
cin >> n >> m;
for(int i =0; i<n; i++)
{
cin >> s1 >> s2;
memo.insert({s1,s2});
}
map<string, string>::iterator it;
for(int i = 0; i<m; i++)
{
cin >> s1;
it = memo.find(s1);
cout << it->second << "\\n";
}
}
짝을 이루는 두 문자열이 n개 주어진다. 그리고 짝을 이루는 문자열 중 한 쪽의 문자열로 다른 쪽의 문자열을 찾는다.
이런 문제 구조를 보고 key, value 를 생각해야 한다. 나는 바로 떠올리지 못한 것 같다. c++의 딕션과 같은 map을 이용해서 문자열을 저장하고 find 함수를 이용하면 쉽게 시간 안에 통과할 수 있다.
다른 풀이
#include <iostream>
#include <map>
using namespace std;
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
int N,M;
map<string,string> m;
string a,b;
cin >> N >> M;
for(int i=0;i<N;i++){
cin >> a >> b;
m[a] = b;
}
for(int i=0;i<M;i++){
cin >> a;
cout << m[a] << '\\n';
}
return 0;
}
m[a] = b 꼴로 map에 값을 할당했다. map은 숫자 index를 사용하는게 아니라 문자열 등을 인덱스처럼 사용할 수 있다는 것을 몰랐다. 엄청 좋은 기능이다! 기억해두고 잘 사용해야겠다.
728x90
'Algorithm' 카테고리의 다른 글
[백준/C++] 11399 ATM (S3) (0) | 2023.10.17 |
---|---|
[백준/C++] 2060 바이러스 (S3) (1) | 2023.10.17 |
[백준/C++] 11723 집합 (S5) (1) | 2023.10.17 |
[백준/C++] 11724 연결 요소의 개수 (S2) (0) | 2023.10.17 |
[백준/C++] 17103 골드바흐 파티션 (S2) (0) | 2023.10.17 |