[백준 10816번 C/C++] 숫자 카드 2
[백준 10816번 C/C++] 숫자 카드 2

https://www.acmicpc.net/problem/10816
10816번: 숫자 카드 2
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0
www.acmicpc.net
해결전략
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
댓글을 사용할 수 없습니다.