백준 문제풀이/백준 Silver

BOJ 10816 - 숫자 카드2 [C/C++]

LKBaekjoon 2023. 10. 30. 16:49
반응형

10816번: 숫자 카드 2 (acmicpc.net)

 

10816번: 숫자 카드 2

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

www.acmicpc.net

문제 설명은 다음과 같다.

문제 설명 / 입력 / 출력
예제 입력 / 예제 출력

map <int, int> 자료 구조를 활용해서 값이 입력되면, 그 key에 바로 접근해서 답을 출력할 수 있게 하면 시간 초과가 걸리지 않을 거라고 생각했고, 그대로 알고리즘을 짰다.

 

1. 입력되는 두 번째 줄의 값들을 key로 밀어넣고, value = 1로 넣는다.

2. 이 때 이미 key 값이 있다면 이미 전에 입력되었다는 뜻이므로, value += 1을 진행한다.

 

그렇게 완성된 map에 이제 하나씩 접근하면서 value 값을 뽑아내면 예제 출력이 완성된다.

(key 값에 접근이 안되는 경우는 0으로 출력하면 된다.)

 

아래는 제출한 C/C++ 코드이다.

#include <iostream>
#include <algorithm>
#include <string>
#include <map>

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

    int num, testnum;
    int myValue, testValue;
    map<int,int> anslist;

    cin >> num;
    for (int i=0;i<num;i++){
        cin >> myValue;
        if (anslist.count(myValue) == 0) anslist[myValue] = 1;
        else anslist[myValue] += 1;
    }
    cin >> testnum;
    for (int j=0;j<testnum;j++){
        cin >> testValue;
        cout << ((anslist.count(testValue) == 0) ? 0 : anslist[testValue]) << " ";
    }
    return 0;
}
반응형