문제
https://www.acmicpc.net/problem/1620
코드(c++)
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
// 실행속도 높이기
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
long long n, m;
cin >> n >> m;
vector<string> numberToName(n + 1); // 번호로 이름을 찾을 때 사용
unordered_map<string, long long>
nameToNumber; // 이름으로 번호를 찾을 때 사용
for (long long i = 1; i <= n; i++) {
cin >> numberToName[i]; // 이름 저장
nameToNumber[numberToName[i]] = i; // 번호 저장
}
while (m--) {
string input;
cin >> input;
if (isdigit(input[0])) {
long long num = atoi(input.c_str()); // 문자열 -> 정수 변환
cout << numberToName[num] << '\n'; // 해당 번호의 포켓몬 이름 출력
} else {
cout << nameToNumber[input] << '\n'; // 해당 이름의 포켓몬 번호 출력
}
}
return 0;
}
구현에 사용한 STL 및 내장 함수
unordered_map
말 그대로 순서가 없는 해시 테이블 STL.
따라서 key 값으로 value를 찾는 데에 비교적 시간이 적게 걸리며, 일반적으로 PS에서 hash를 사용하고자 할때 이 STL을 이용한다. 이 문제는 map으로도 해결가능하긴 하다.
atoi(input.c_str())
input에 대해 문자열을 정수로 타입 변환
+ 다른 방법: string 헤더 정의 후stoi 함수로 문자열을 감싸주는 방법도 있다.
isdigit()
숫자면 true 아니면 false 리턴
코드 구현 설명
numberToName 배열
1번인 포켓몬부터 N번에 해당하는 포켓몬까지 한 줄에 하나씩 입력할 수 있도록 n+1의 크기로 설정
번호를 입력하면 포켓몬 이름을 출력하도록 한다.
NameToNumber 배열
이름으로 번호를 찾을 때 사용하는 배열
포켓몬 이름을 입력하면 번호를 출력하도록 한다.
만약 input이 숫자면 numberToName, 그렇지 않으면 NameToNumber 배열을 사용해 처리하게끔 했다.
문제 조건에서 n과 n은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수라고 했으므로 long long 타입으로 선언해야한다!
'PS' 카테고리의 다른 글
[백준] 9095번: 1, 2, 3 더하기 (0) | 2024.09.15 |
---|---|
[백준] 1463번: 1로 만들기 (0) | 2024.09.13 |
[코드트리] 정수 명령 처리 5 (0) | 2024.09.07 |
[코드트리] 문자에 따른 명령 2 (0) | 2024.09.06 |
[코드트리] dx dy technique / 방향에 맞춰 이동 (0) | 2024.09.05 |