백준 파이썬 10814 숫자 카드 2
Algorithm/backjoon

백준 파이썬 10814 숫자 카드 2

뉴비뉴 2023. 10. 16.

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

 

10816번: 숫자 카드 2

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

www.acmicpc.net

Code

import sys

input = sys.stdin.readline

n = int(input())  # 10
cards = list(map(int, input().split()))  # [6, 3, 2, 10, 10, 10, -10, -10, 7, 3]
m = int(input())  # 8
my_cards = list(map(int, input().split()))  # [10, 9, -5, 2, 3, 4, 5, -10]
lst = []

for i in my_cards:
    if i in cards:
        lst.append(cards.count(i))
    else:
        lst.append(0)

for j in lst:
    print(j, end=" ")

 

시간을 해결하기 위한 문제이므로 단순히 list의 메소드인 count 를 통해서 문제를 해결하는 것은 적절하지 않은 방법이다.

그러므로 백준에서 통과하지 못했다.

 

https://www.youtube.com/watch?v=QVoEbcK-eNI 

import sys

input = sys.stdin.readline
N = int(input())
a = map(int, input().split())

# 1. hash에 num 개수 반영
hash = {}
for num in a:
    # 원래 있는 값을 가져와 달라 num 이라는 키가 존재하면 그 값을 가져오고, num이라는 키가 존재하지 않으면 0 을 반환
    hash[num] = hash.setdefault(num, 0) + 1
    
# hash= {6: 1, 3: 2, 2: 1, 10: 3, -10: 2, 7: 1}

# 2. hash 에서 num 개수 출력
M = int(input())
b = map(int, input().split())
for num in b:
    print(hash.setdefault(num, 0), end=' ')

유레카

setdefault: num 이라는 키가 존재하면 그 값을 가져오고, num이라는 키가 존재하지 않으면 0을 반환

 

댓글

💲 추천 글