sm 기술 블로그

90. 10815(숫자카드) 본문

문제/백준_파이썬

90. 10815(숫자카드)

sm_hope 2022. 6. 19. 08:30
import sys
input = sys.stdin.readline

N = int(input())  # 상근이가 가지고 있는 카드 개수

haveCard = list(set(map(int, input().split())))

M = int(input())  # 비교할 카드 개수

compareCard = list(map(int, input().split()))

cardDic = {haveCard[i]: 1 for i in range(len(haveCard))}

for val in compareCard:
    try:
        cardDic[val]
        print("1", end=" ")
    except:
        print("0", end=" ")

문제요약

상근이가 가지고 있는 카드의 숫자와 제시된 카드의 숫자가 같은지 비교하시오.

설명

파이썬에서는 N,M이 따로 필요없다.

먼저 카드 수를 입력받고 데이터 사전에 저장해주었다.

cardDic = {haveCard[i]: 1 for i in range(len(haveCard))}

가지고 있는 카드를 무엇이다라고 표시하기위해 사용하였다.

 

데이터사전사용시 만약 없는 key값이 들어온다면 예외가 발생한다.

따라서 예외가 발생한다면 가지고 있지 않은 카드의 수라는 의미와 같다.

for val in compareCard:
    try:
        if(cardDic[val] == 1):
            print("1", end=" ")
    except:
        print("0", end=" ")

 

추가

간단하게 리스트 항목을 비교하는 방법이 있다.

- if A in B

B안에 A가 있다면 참이다.

 

위 문법을 적용하면,

import sys
input = sys.stdin.readline

input()

haveCard = set(map(int, input().split()))

input()

compareCard = list(map(int, input().split()))

for val in compareCard:
    if val in haveCard:
        print("1", end=" ")
    else:
        print("0", end=" ")

다음과 같이 간단하게 비교 가능하다.

단, 가지고있는 카드를 집합으로 하지 않으면 시간초과가 발생한다.

'문제 > 백준_파이썬' 카테고리의 다른 글

92. 1620(나는야 포켓몬 마스터 이다솜)  (0) 2022.06.19
91. 14425 (문자열 집합)  (0) 2022.06.19
89. 18870 (좌표압축)  (0) 2022.06.18
88. 10814(나이순 정렬)  (0) 2022.06.17
87. 1181(단어 정렬)  (0) 2022.06.16
Comments