25. Maps-STL
[ 난이도: Easy | 분야: STL ]
1. 내용 정리
Map은 C++의 STL의 일부이다. Maps는 특정한 순서를 따르는 key값과 연결된 값들을 결합한 형태의 요소들을 저장한다.
자주 사용하는 Map의 멤버 함수는 다음과 같다:
Map 템플릿
std::map <key_type, data_type>
선언
map<string,int< m;
크기
int length = m.size();
삽입
m.insert(make_pair("hello",9));
요소 삭제
m.erase(val);
val에 해당하는 pair를 map에서 제거한다.
요소 찾기
map<string,int>::iterator itr=m.find(val);
값이 있다면 iterator를 반환하고 없다면 m.end()를 반환한다.
key로 저장된 값 접근하기
m["MAPS"]
2. 과제
당신은 학교에서 선생님의 조수로 선정되었고 그녀는 학생들의 답안지를 채점하고 있다.
각 학생들은 이중 답안지를 가지고 있다. 그래서 선생님은 Q개의 쿼리를 가지고 있다:
1 X Y: 학생 이름이 X인 데이터에 마크 Y를 추가한다.
2 X: 학생 이름이 X인 데이터의 마크를 제거한다.
3 X: 학생 이름이 X인 데이터의 마크를 출력한다. (만약 X의 마크를 얻지 못한다면, 0을 출력한다.)
입력 형식
입력의 첫 번째 줄은 쿼리의 개수를 나타내는 Q를 가지고 있다.
그 다음 Q개의 줄은 각각 1개의 쿼리를 가지고 있다. 첫 번째 정수는 각 쿼리의 형식을 나타내는 정수를 가지고 있다.
만약 쿼리의 형식이 1이라면, 한 개의 문자열 X와 정수 Y를 가지고 있고 X는 학생의 이름, Y는 마크를 나타낸다.
만약 쿼리의 형식이 2나 3이라면, 한 개의 문자열 X를 가지고 있고 X는 학생의 이름이다.
제약 사항
Q는 1보다 크거나 같고 10^5보다 작거나 같다.
type은 1보다 크거나 같고 3보다 작거나 같다.
X의 절댓값은 1보다 크거나 같고 6보다 작거나 같다.
Y는 1보다 크거나 같고 10^3보다 작거나 같다.
출력 형식
쿼리의 형식이 3일 때 해당하는 학생의 마크들을 출력해라.
입력 예시
7
1 Jesse 20
1 Jess 12
1 Jess 18
3 Jess
2 Jess
3 Jess
출력 예시
30
20
0
문제
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
return 0;
}
정답
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
map<string, int> m; // create map
int q = 0; // number of queries
cin >> q;
for(int i = 0; i < q; i++) {
int type; string name; int marks;
cin >> type;
cin >> name;
map<string,int>::iterator itr=m.find(name);
if(type == 1) {
cin >> marks;
if(itr != m.end()) {
m[name] += marks;
}
else {
m.insert({name, marks});
}
}
else if(type == 2) {
m.erase(name);
}
else {
if(itr != m.end()) {
cout << m[name] << endl;
}
else {
cout << 0 << endl;
}
}
}
return 0;
}
©️Hackerrank. All Rights Reserved.
'프로그래밍 언어 > C, C++' 카테고리의 다른 글
[Hackerrank] 27. Deque-STL (0) | 2024.02.22 |
---|---|
[Hackerrank] 26. Print Pretty (0) | 2024.02.21 |
[Hackerrank] 24. Sets-STL (0) | 2024.02.20 |
[Hackerrank] 23. Lower-Bound STL (0) | 2024.02.20 |
[Hackerrank] 22. Vector-Erase (0) | 2024.02.19 |