https://www.acmicpc.net/problem/10816
제출 코드
#include <iostream>
#include <map>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n;
map<int, int> cards;
for (int i = 0; i < n; i++)
{
int input;
cin >> input;
cards[input]++;
}
cin >> m;
for (int i = 0; i < m; i++)
{
int input;
cin >> input;
cards[input]++;
cout << --cards[input] << " ";
}
}
map을 이용해서 중복되는 숫자들을 카운트해놓고,
map에 입력받은 숫자를 key로 value를 찾아 1을 더한 뒤, 출력할 때에는 1을 다시 빼 주고 출력했다(0을 출력하기 위해)
map에 해당 key가 있는지 확인하고, 있는 경우 다시 값을 가져오려면 2번씩 연산을 해서 더 오래걸리지 않을까 싶었는데, 한 번 그 방법으로도 코드를 작성해 보았다
#include <iostream>
#include <map>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n;
map<int, int> cards;
for (int i = 0; i < n; i++)
{
int input;
cin >> input;
cards[input]++;
}
cin >> m;
for (int i = 0; i < m; i++)
{
int input;
cin >> input;
if (cards.count(input))
cout << cards[input] << " ";
else
cout << "0 ";
}
}
map.count(key)를 넣어주면 key의 개수를 반환하는데, key는 고유값이기 때문에 존재하면 1, 존재하지 않으면 0을 반환한다
이 방법이 메모리도 덜 잡아먹고 더 빠른 것을 확인할 수 있었다
혹은
#include <iostream>
#include <map>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n;
map<int, int> cards;
for (int i = 0; i < n; i++)
{
int input;
cin >> input;
cards[input]++;
}
cin >> m;
for (int i = 0; i < m; i++)
{
int input;
cin >> input;
if (cards.find(input) != cards.end())
cout << cards[input] << " ";
else
cout << "0 ";
}
}
map.find(key) 함수는 해당 key의 접근자를 반환하고, 존재하지 않을 경우 map.end()를 반환하기 때문에 이를 이용해서 체크해볼 수도 있다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 10845] 큐 (0) | 2025.01.08 |
---|---|
[C++][백준 10828] 스택 (0) | 2025.01.08 |
[C++][백준 9012] 괄호 (0) | 2025.01.07 |
[C++][백준 2164] 카드2 (0) | 2025.01.07 |
[C++][백준 1920] 수 찾기 (0) | 2025.01.07 |