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을 그대로 쓰니 런타임 에러가 났는데 따옴표를 이용해 문자열로 바꾸니 정답이 되었다.
'🧩 Programming Languages > Python CodingTest' 카테고리의 다른 글
백준 1269번(silver 4) : 대칭 차집합 (두 리스트 간 집합 구하기) (0) | 2024.01.23 |
---|---|
백준 1764번(silver 4) : 듣보잡 문제 (리스트 교집합 & , join) (2) | 2024.01.22 |
백준 7785번(silver 5) : 회사에 있는 사람(딕셔너리) (0) | 2024.01.22 |
백준 14425번(silver 4) : 문자열 집합 - 딕셔너리 (0) | 2024.01.16 |
백준 10815번(silver 5) : 숫자 카드 (딕셔너리, 이진탐색) (0) | 2024.01.14 |