[python_파이썬_pass]백준_10816번_숫자 카드2_풀이

2024. 5. 11. 20:59코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/S9Tn1JM6-yc?feature=shared

 

10815번 숫자카드를 풀었다면 이것도 바로 해결할 수 있다.

방법은 동일하다. dict를 활용해서 key값에 해당하는 value값을 불러오면 된다.

단, key값이 없을 경우 error를 어떻게 대응하는지 2가지 방법으로 해결했다.

 

<첫번째 시도 : 맞았습니다.>

map으로 받을때 리스트로 변환하기 위해서 [map()]이렇게 하면 안된다. 꼭 list(map())으로 하자. => {<map object at 0x000001E243A3ECE0>: 1}

처음에 N_list로 가지고 있는 카드의 숫자를 리스트로 만들어 주고 이걸 dict로 전환한다. 이때 동일한 숫자는 value에 +1을 한다

try except로 M_list를 불러오면서 dict에 key값이 없으면 0을 출력, key값이 있으면 value를 출력하게 한다.

import sys
input = sys.stdin.readline

N = int(input())
N_list = list(map(int, input().split()))
my_get = {}

for i in N_list:
    if i in my_get.keys():
        my_get[i] += 1
    else:
        my_get[i] = 1


M = int(input())
M_list = list(map(int, input().split()))

for i in M_list:
    try:
        print(my_get[i], end = ' ')
    except KeyError:
        print(0, end = ' ')

 

<두번째 시도 : 맞았습니다.>

dict.get(매개변수)을 사용하면 error가 발생하지 않고 없는 값이면 None을 발생시켜 if에서는 False로 인식된다.

import sys
input = sys.stdin.readline

N = int(input())
N_list = list(map(int, input().split()))
my_get = {}

for i in N_list:
    if i in my_get.keys():
        my_get[i] += 1
    else:
        my_get[i] = 1


M = int(input())
M_list = list(map(int, input().split()))

for i in M_list:
    if my_get.get(i):
        print(my_get[i], end = ' ')
    else:
        print(0, end = ' ')
       

 

 

<다른사람풀이 참고>

1. list를 출력할때 print(*[]) : * 전개연산자를 사용하면 for문을 사용하지 않고 바로 출력된다.

    ㄴ print(*[d[x] if x in d.keys() else 0 for x in q])

728x90
반응형