[백준 10816번 C/C++] 숫자 카드 2
[백준 10816번 C/C++] 숫자 카드 2
https://www.acmicpc.net/problem/10816
해결전략
map과 set은 중복값을 허용하지 않는다.
따라서 이 문제에서는 unordered_map을 사용하였다. unordered_map에 사용되는 헤더는 #include <unordered_map>이다.
주어진 카드 숫자를 인덱스 번호로 사용하는 unorder_map을 만든다.
unordered_map<int, int> unMap;
unMap[input]에서 input이 처음에 주어지는 카드 번호들이다. 위의 예제 입력의 경우 3, 10, -10은 중복으로 주어진다.
unMap[6]=1
unMap[3]=2
unMap[2]=1
unMap[10]=3
unMap[-10]=2
unMap[7]=1
unMap에 값을 넣으면 다음과 같을 것이다.
코드
unordered_map
#include <iostream>
#include <unordered_map>
using namespace std;
int n, m, input, card;
unordered_map<int, int> unMap;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for(int i=0; i<n; i++){
cin >> input;
unMap[input]++;
}
cin >> m;
for (int i = 0; i < m; i++) {
cin >> card;
cout << unMap[card]<< " ";
}
return 0;
}
map
#include <iostream>
#include <map>
using namespace std;
map<int, int> myMap;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n, m, input, card;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> input;
myMap[input]++;
}
cin >> m;
for (int i = 0; i < m; i++) {
cin >> card;
cout << myMap[card] << " ";
}
return 0;
}
unordered_map이나 map 둘 다 사용가능하지만, 위의 경우 unordered_map이 더 빠르다.
map이나 unordered_map 이라는 자료형이 생각나지 않는 경우
문제를 풀다보면 적절한 STL이 생각나지 않을 때도 있다.
이 문제의 경우 주어진 값의 범위가 "-10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다."라는 사실을 활용해서 배열을 만들 수 있다.
카드가 음수 일 수도 있기 때문에
Count[ input + 10000000 ] 로 만든다.
#include<iostream>
using namespace std;
int n, m, input, card;
int Count[20000001];
int main(void) {
cin.tie(NULL);
ios::sync_with_stdio(false);
cout.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> input;
Count[input + 10000000]++;
}
cin >> m;
for (int i = 0; i < m; i++)
{
cin >> card;
cout << Count[card + 10000000] << " ";
}
}
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 1654번 C/C++] 랜선 자르기 (0) | 2023.06.26 |
---|---|
[백준 10814번 C/C++] 나이순 정렬 (0) | 2023.06.24 |
[백준 1021번 C/C++] 회전하는 큐 (0) | 2023.06.22 |
[백준 2331번 C/C++] 반복수열 (0) | 2023.06.22 |
[백준 1931번 C/C++] 회의실 배정 (0) | 2023.06.21 |
댓글
이 글 공유하기
다른 글
-
[백준 1654번 C/C++] 랜선 자르기
[백준 1654번 C/C++] 랜선 자르기
2023.06.26 -
[백준 10814번 C/C++] 나이순 정렬
[백준 10814번 C/C++] 나이순 정렬
2023.06.24 -
[백준 1021번 C/C++] 회전하는 큐
[백준 1021번 C/C++] 회전하는 큐
2023.06.22 -
[백준 2331번 C/C++] 반복수열
[백준 2331번 C/C++] 반복수열
2023.06.22