본문 바로가기

알고리즘

[C/C++] 코드업(codeup) 3170번 기억력 테스트 9

▽문제 바로가기

https://codeup.kr/problem.php?id=3170

 

기억력 테스트 9

첫째 줄에 $N$과 $M$이 입력된다.($1<=N, M<=100,000$) 둘째 줄부터 $N$줄 동안 문자열 $S$와 정수 $k$가 입력된다.  그 다음 $M$줄 동안 질문 $Q$가 문자열로 입력된다. 만약 부르지 않았던 단어를 질문하는 경우 $0$을 출력한다. ($S$, $Q$는 100글자 이하 영어 소문자 알파벳으로만 구성, $k$는 $10$이하의 자연수)

codeup.kr


입력

첫째 줄에 N과 M이 입력된다.(1<=N,M<=100,000)

둘째 줄부터 N줄 동안 문자열 S와 정수 k가 입력된다. 

그 다음 M줄 동안 질문 Q가 문자열로 입력된다. 만약 부르지 않았던 단어를 질문하는 경우 0을 출력한다.

(S, Q는 100글자 이하 영어 소문자 알파벳으로만 구성, k는 10이하의 자연수)

 

출력

질문에 맞는 [누적 숫자]를 한줄에 하나씩 출력한다.

 

문제 풀이

 

C++ STL에 map이 있습니다. map은 키와 값을 가집니다.

 

map<키, 값>이름

 

map<string, int> myMap

myMap["hello"] = 1;
myMap["world"] = 2;

 

이 map을 이용하면 좀 더 직관적이게 표현할 수 있습니다. 배열이나 벡터처럼 사용방법은 비슷합니다.

 

#include <stdio.h>
#include <map>
#include <algorithm>
#include <iostream>

using namespace std;

int main(){
	
	int n, m;
	scanf("%d%d", &n, &m);
	
	//string, int를 갖는 map 
	map <string, int> arr;
	string s;
	int num;
	
	for(int i=0;i<n;i++){
		cin >> s;
		cin >> num;
		arr[s] += num;	//누적
	}
	
	string sArr[m];
	for(int j=0;j<m;j++){
		cin >> sArr[j];
	}
	
	for(int i=0;i<m;i++){
		printf("%d\n", arr[sArr[i]]);
	}
	
	return 0;
}