Algorithm

[백준/C++] 17219 비밀번호 찾기 (S4)

Yannoo 2023. 10. 17. 11:45
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