https://www.codetree.ai/missions/8/problems/corresponding-numbers-and-characters/description
코드트리 | 코딩테스트 준비를 위한 알고리즘 정석
국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.
www.codetree.ai
코드:
#include <bits/stdc++.h>
#include <unordered_map>
using namespace std;
int n, m;
unordered_map<string, string> hMap;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) {
string key;
cin >> key;
hMap[key] = to_string(i);
hMap[to_string(i)] = key;
}
while (m--) {
string key;
cin >> key;
cout << hMap[key];
}
}
주어진 n,m에 대하여 n번 동안 문자열 값이 주어질 때 각각 순서대로 숫자를 매긴 후
m번 동안 주어진 문자열과 수에 대하여 문자열이 주어진다면 몇 번째 문자열인지, 수가 주어진다면
그 수에 해당하는 문자열이 무엇인지 구하는 문제입니다.
생각한 아이디어 2가지에 대해 설명해보겠습니다.
1) unordered_map<string, int> , unordered_map<int, string>을 두 개 선언하여 문자열을 key,value
둘다 지정하여 m번 동안 주어진 입력이 수인지 문자열인지 판단하여 답을 하는 경우
2) unordered_map<string, string>을 선언하여 문자열을 key로 저장함과 동시에 value로 지정할 수를
string으로 변경하여 저장하는 경우, 또한 그 수를 string으로 변경해 key로 지정함과 동시에 문자열을
value로 지정하는 경우
1)의 경우 m번 동안 주어진 입력에 대해 수인지 문자열인지 판단하는 부분에서 불편함이 있다고 판단하여
2)의 경우를 사용하도록 했습니다.
2)의 경우를 사용한다면 m번 주어지는 입력이 수인지 문자열인지 판단할 이유가 없어집니다.
수, 문자열 모두 string 형태로 저장하였기 때문입니다.
그래서 단순히 hMap[key]를 통해 value를 알아낼 수 있습니다.
'C++ > 코드트리 챌린지' 카테고리의 다른 글
[코드트리 챌린지] 6주차 Two Pointer - Two Pointer / 가장 짧은 부분합 (0) | 2023.10.14 |
---|---|
[코드트리 챌린지] 6주차 HashMap - HashMap / 낮은 지점들 (3) | 2023.10.14 |
[코드트리 챌린지] 5주차 HashMap - HashMap / 가장 많은 데이터 (0) | 2023.10.09 |
[코드트리 챌린지] 5주차 HashMap - HashMap / 숫자 등장 횟수 (2) | 2023.10.09 |
[코드트리 챌린지] 5주차 HashMap - HashMap / hashmap 기본 (0) | 2023.10.08 |