https://www.acmicpc.net/problem/10815
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
문제 설명은 위 링크로 대신하고 넘어가겠다.
풀이
처음에는 N에 대한 숫자와 M에 대한 숫자를 리스트로 받아서 조건문을 이용해서 M의 리스트 요소가 N의 리스트에 있는지 확인하는 방법으로 풀이를 하였다. 그러나 이 방식으로 풀면 시간초과가 나와서 다른 방식을 사용해야 했다.
이때 힌트를 보니 해시를 이용하라고 되어있길래 그제서야 set이 생각났다. 물론 파이썬에서 해시맵이라면 dictionary도 있지만 사용하지 않은 이유는 문제의 조건 자체가 숫자의 중복이 없었기 때문에 각 숫자가 몇개인지 카운트를 할 필요가 없어서 좀 더 직관적인 set을 사용하기로 했다.(물론 직관적이라는건 주관적인 의견이기 때문에 set대신 dictionary를 사용해도 괜찮다, 중요한건 해시를 기반으로하는 자료구조를 이용하는 것이기 때문이다.) 그래서 N의 숫자들은 리스트 대신 set으로 바꾸었고 나머지는 그대로 하였더니 문제가 해결되었다.
코드
N = int(input())
card = set(map(int, input().split()))
M = int(input())
num = list(map(int, input().split()))
result = ["0"] * M
for i in range(M):
if num[i] in card :
result[i] = "1"
print(' '.join(result))'Algorithm > 백준' 카테고리의 다른 글
| [BOJ] 1707 - 이분 그래프 판별 (Java) (1) | 2024.08.21 |
|---|---|
| [백준] 1012번 - 유기농 배추 (0) | 2024.03.27 |
| [백준] 9095번 1,2,3 더하기 - python (0) | 2024.02.17 |