728x90
[백준알고리즘] 10815번: 숫자 카드 -Python
https://www.acmicpc.net/problem/10815
처음에 주어진 수들이 존재하고, 다음에 주어지는 값들이 여기에 존재하는지 판단하는 문제이다.
생각나는 대로 이분 탐색을 통해서 문제를 해결했다. 해결하고 보니 다른 분들의 코드는 통과 시간이 더 짧길래 확인을 해보니 처음에 존재하는 카드들을 set()을 통해 받으신 분들이 많았다. set()으로 받고 추가로 찾는 값들에는 in을 써서 확인을 했다.
set()을 이용한 건 그냥 그러려니 하는데 특이한 건 딕셔너리를 이용한 방법이었다. 딕셔너리 자체가 이상한 것이 아니라 잘 안 썼기 때문에 딕셔너리에 값을 넣고 꺼내는 방식을 간단하게 표현해 인상이 깊었다. 그래서 그렇게도 한 번 따라서 해봤다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import sys
input = sys.stdin.readline
def find(low, high):
if low > high:
print("0", end=" ")
return
mid = (low + high) // 2
if cards[mid] == c:
print("1", end=" ")
return
elif cards[mid] > c:
find(low, mid - 1)
else: # cards[mid] < c
find(mid + 1, high)
n = int(input())
cards = list(map(int, input().split()))
cards.sort()
m = int(input())
choices = list(map(int, input().split()))
for c in choices:
find(0, n-1)
|
dict 안에서 (num, 1)을 tuple 형태로 (key, value) 쌍으로써 반복해서 넣어주게 된다. 꺼낼 때에는 .get() 메서드를 사용해서 에러 발생을 예방하고, get(c, 0)으로 함수를 호출해 저장한 value들은 1밖에 없으므로 key에 c가 있으면 1을 return 해 줄 것이고, 없다면 default value로 정해준 0을 return 해줄 것이다.
1
2
3
4
5
6
7
8
9
10
|
import sys
input = sys.stdin.readline
n = input()
cards = dict((num, 1) for num in list(map(int, input().split())))
m = input()
choices = list(map(int, input().split()))
for c in choices:
print(cards.get(c, 0), end=" ")
|
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 11729번: 하노이 탑 이동 순서 -Python (0) | 2020.03.03 |
---|---|
[백준알고리즘] 11728번: 배열 합치기 -Python (0) | 2020.03.03 |
[백준알고리즘] 1967번: 트리의 지름 -Python (0) | 2020.03.01 |
[백준알고리즘] 11725번: 트리의 부모 찾기 -Python (0) | 2020.03.01 |
[백준알고리즘] 1167번: 트리의 지름 -Python (0) | 2020.03.01 |