알고리즘
[백준 10816번 파이썬] 숫자 카드2
로드존슨
2023. 3. 7. 01:16
728x90
https://www.acmicpc.net/problem/10816
10816번: 숫자 카드 2
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
문제 풀이
문제를 보면 for문을 두번 돌려서 하면 되겠구나.. 했는데
난 백준이 던진 미끼에 낚였다....덕분에 이제 시간 복잡도에 대해서 생각하게 되었다.
적당히 범위를 줬겠지 했는데 계산해보니까 500,000 *500,000= 2,500억 횟수...ㅎㄷ
N(1 ≤ N ≤ 500,000) M(1 ≤ M ≤ 500,000) 각각의 범위
시간 복잡도 때문에 문제를 다시 생각했다.
a= 6,3,2,10,10,10,-10,-10,7,3 이면 먼저 a에 있는 각 숫자들의 개수를 딕셔너리로 저정한다.
a_dict = {6: 1, 3: 2, 2: 1, 10: 3, -10: 2, 7: 1}
import sys
input = sys.stdin.readline
N = int(input())
a = list(map(int, input().split()))
M = int(input())
b = list(map(int, input().split()))
a_dict = {}
for num in a: #a의 num이 a_dict 의 key 값이 되고
if num not in a_dict: # a_dict 의 존재유무에 따라 value 값을 저장
a_dict[num] = 1 # a_dict {}에 없을시 1
else:
a_dict[num] += 1 # a_dict {}에 있을시 +1
result = []
for num in b: # a_dict = {6: 1, 3: 2, 2: 1, 10: 3, -10: 2, 7: 1}
if num in a_dict: # a_dict 에서 b 10 9 -5 2 3 4 5 -10 값에 따른 a_dict value 값을 반환
result.append(a_dict[num])
else:
result.append(0)
print(' '.join(map(str, result)))
728x90