https://www.acmicpc.net/problem/10816
아이디어:
1. map 사용. map의 first는 카드, second는 갯수로 활용. ex) <10, 2장>, <11, 0장>, <12, 3장> ...
2. 출력은 그냥 map의 second 출력
#include <iostream>
#include <map>
using namespace std;
map <int, int> card;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m, k;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> k;
card[k]++;
}
cin >> m;
for (int i = 0; i < m; i++) {
cin >> k;
cout << card[k] << " ";
}
return 0;
}
틀린 코드 설명:
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m, k;
cin >> n;
int* N = new int[n];
for (int i = 0; i < n; i++) {
cin >> k;
N[i] = k;
}
cin >> m;
int* M = new int[m];
for (int i = 0; i < m; i++) {
cin >> k;
M[i] = k;
}
for (int i = 0; i < m; i++) {
cout << count(N, N + n, M[i]) << " ";
}
return 0;
}
원인(추정): count 함수로 인한 시간 초과
다른 방식:
이분 방식
int형 1차원 배열에 카드를 입력하고 오름차순으로 정렬한다.
찾는 숫자가 처음 나오는 위치, 찾는 숫자보다 큰 값이 처음 나오는 위치를 구하고 뺄셈으로 개수 구해서 출력한다.
upper_bound(), lower_bound() 함수를 사용
'algorithm' 카테고리의 다른 글
백준 1934번 최소공배수 (1) | 2024.10.20 |
---|---|
백준 11478번 서로 다른 부분 문자열의 개수 (0) | 2024.10.20 |
백준 1269번 대칭 차집합 (2) | 2024.10.13 |
백준 1764번 듣보잡 (3) | 2024.10.13 |
백준 1620번 나는야 포켓몬 마스터 이다솜 (1) | 2024.10.13 |