Algorithm/BOJ

[BOJ] #10816 숫자카드2

jHoon0223 2023. 10. 27. 21:08

https://www.acmicpc.net/problem/10816

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0

www.acmicpc.net


10815번 문제와 비슷한 듯 다른 문제다. 다른 점이라 하면, 시간제한이 1초라는 점인데, 처음에 10815번 문제와 같이 set 컨테이너를 이용하여 풀었더니 시간초과가 나왔다. set에서 find나 count를 쓴다 해도 O(logN)의 시간복잡도를 가지는데, 이것이 반복문 안에서 움직이다 보니 시간초과가 뜨는 듯했다. 따라서 map을 사용하여 find나 count 없이 최대한 cost가 낮은 방향으로 풀었다. 딱 보기에 10815번과 같다고 그냥 set을 이용하여 풀고 헤매느라 시간이 많이 걸린 문제였다.

#include <iostream>
#include <map>

using namespace std;

int main() {
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);

    int N;
    cin >> N;

    map<int, int> m;
    for (int i=0; i<N; i++) {
        int a;
        cin >> a;
        m[a]++;
    }

    int M;
    cin >> M;

    for (int i=0; i<M; i++) {
        int a;
        cin >> a;

        cout << m[a] << ' ';
    }

    return 0;
}

m[a]++;​
map을 이용하여 m[a]++; 같은 수식으로 특정 key값이 그 집합에서 포함된 횟수를 쉽게 나타낼 수 있다. map에서 key값이 value번 나왔다는 의미. set container의 count를 써도 되긴 하지만, 이쪽이 cost가 적게 걸린다.
728x90

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] #1269 대칭 차집합  (0) 2023.10.30
[BOJ] #1620 나는야 포켓몬 마스터 이다솜  (0) 2023.10.30
[BOJ] #10815 숫자카드  (0) 2023.10.27
[BOJ] #7785 회사에 있는 사람  (0) 2023.10.27
[BOJ] #2903 중앙 이동 알고리즘  (0) 2023.10.26