반응형
#INFO
난이도 : SILVER4
문제 유형 : Hash
출처 : https://www.acmicpc.net/problem/1620
#SOLVE
문제 풀이에 앞서 BOJ 1620 문제는 입출력이 매우 빈번하게 일어나는 문제이기에, 풀이 전에 다음 코드를 앞에 명시해야 합니다.
아래 코드를 사용하지 않고, cin & cout 스트림을 사용하면 시간초과가 발생합니다.
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
문제풀이 아이디어는 간단합니다. Hash 자료구조를 사용할 것입니다.
포켓몬 문자열을 key로 포켓몬 번호 value에 접근할 map nameToNum과,
포켓몬 번호를 key로 포켓몬 문자열 value에 접근할 map numToName을 선언해 줍니다.
unordered_map<string, int> nameToNum;
unordered_map<int, string> numToName;
다음으로 m 횟수만큼 포켓몬 문자열, 포켓몬 번호 정보를 nameToNum과 numToName에 각각 pair<포켓몬 문자열, 포켓몬 번호> pair<포켓몬 번호, 포켓몬 문자열> 형태로 저장합니다.
int m, n;
cin >> m >> n;
string key = "";
int num = 0;
while(m--){
cin >> key;
num++;
nameToNum.insert(make_pair(key, num));
numToName.insert(make_pair(num, key));
}
이제 입력으로 포켓몬 번호가 들어오면 numToName에서 포켓몬 문자열을,
입력으로 포켓몬 문자열이 들어오면 nameToNum에서 포켓몬 번호를 출력해 주면 됩니다.
string input = "";
while(n--){
cin >> input;
// input이 포켓몬 문자열인 케이스 -> nameToNum 에서 몇 번째 포켓몬인지 출력
if((65 <= input[0] && input[0] <= 90)
|| (97 <= input[0] && input[0] <= 122)){
cout << nameToNum[input] << '\n';
}
// input이 포켓몬 번호인 케이스 -> numToName 에서 포켓몬 문자열 출력
else{
int val = stoi(input);
cout << numToName[val] << '\n';
}
}
반응형
'Archive2 > ProblemSolving' 카테고리의 다른 글
[프로그래머스 고득점 Kit] 완주하지 못한 선수 C++ 문제 풀이 (0) | 2022.09.10 |
---|---|
[BOJ] C++ 7785 "회사에 있는 사람" 문제 풀이 (0) | 2022.09.09 |
[LeetCode] 70. Climbing Stairs 문제 풀이 C++ (0) | 2022.09.03 |
[LeetCode] 169. Majority Element 문제 풀이 C++ (feat. 과반수 투표 알고리즘) (0) | 2022.09.03 |
[BOJ] C++ 1406 "에디터" 문제 풀이 (0) | 2022.08.16 |