🧩 Programming Languages/Python CodingTest
백준 10816번(silver 4) : 숫자 카드 2 - 딕셔너리
복숭아아이스티에샷추가
2024. 1. 22. 21:00
10816번: 숫자 카드 2
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0
www.acmicpc.net
내가 작성한 코드 - 풀이 참고ㅠ
import sys
input = sys.stdin.readline
n = int(input())
card = list(map(int, input().split()))
m = int(input())
check = list(map(int, input().split()))
dic = dict() # 각 숫자 카드를 몇 개 보유하는지 저장할 딕셔너리 생성
# 기본 값 1장 그런데 이미 있다면 1 더해서 보유 수를 늘리기
for i in card:
if i in dic:
dic[i] += 1
else:
dic[i] = 1
for c in check:
if c in dic: # 갖고 있다면
print(dic[c], end=' ') # 보유 수 출력
else:
print(0, end=' ')
먼저 내가 구현하려고 했을 때 list로 만들어둔 card 를 딕셔너리로 바꾸려고 했는데 쉽지 않아서 풀이를 참고하였다. 그런데 딕셔너리를 아예 새로 만드는 것도 방법이라는 것을 알게 되니 바로 풀었다!
그리고 출력하는 부분에서 많은 사람들이 한 줄로 구현하던데 부끄럽지만 이해하는데 시간이 조금 걸렸다.
출력 코드만 수정
print(' '.join(str(dic[c]) if c in dic else '0' for c in check))
애초에
v = [1, 2, 3, 4, 5]
print(' '.join(str(i) for i in v))
# 출력 : 1 2 3 4 5
처음 코드 봤을 때는 왜 굳이 문자열화해서 출력해야하는지 궁금했는데 위와 같이 출력하는 방법이 따로 있었다.
그리고 else 문에서 숫자 0을 그대로 쓰니 런타임 에러가 났는데 따옴표를 이용해 문자열로 바꾸니 정답이 되었다.