일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 |
29 | 30 | 31 |
- 티스토리챌린지
- 다익스트라
- 전쟁-전투
- pintos
- 크래프톤 정글
- 크래프톤 정글 4기
- anonymous page
- 유니티
- 연결리스트
- 추상클래스와인터페이스
- 크래프톤정글
- TiL
- 백준
- 네트워크
- 알고리즘
- User Stack
- KRAFTON JUNGLE
- BFS
- kraftonjungle
- c#
- project3
- 4기
- Unity
- 파이썬
- C
- 핀토스
- 알고리즘수업-너비우선탐색2
- 오블완
- 크래프톤정글4기
- 이벤트 함수 실행 순서
- Today
- Total
말감로그
[백준] 2776번 암기왕 (파이썬) 본문
문제
연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, 연종이 하루 동안 본 정수들을 모두 ‘수첩1’에 적어 놓았다. 그것을 바탕으로 그가 진짜 암기왕인지 알아보기 위해, 동규는 연종에게 M개의 질문을 던졌다. 질문의 내용은 “X라는 정수를 오늘 본 적이 있는가?” 이다. 연종은 막힘없이 모두 대답을 했고, 동규는 연종이 봤다고 주장하는 수 들을 ‘수첩2’에 적어 두었다. 집에 돌아온 동규는 답이 맞는지 확인하려 하지만, 연종을 따라다니느라 너무 힘들어서 여러분에게 도움을 요청했다. 동규를 도와주기 위해 ‘수첩2’에 적혀있는 순서대로, 각각의 수에 대하여, ‘수첩1’에 있으면 1을, 없으면 0을 출력하는 프로그램을 작성해보자.
입력
첫째 줄에 테스트케이스의 개수 T가 들어온다. 다음 줄에는 ‘수첩 1’에 적어 놓은 정수의 개수 N(1 ≤ N ≤ 1,000,000)이 입력으로 들어온다. 그 다음 줄에 ‘수첩 1’에 적혀 있는 정수들이 N개 들어온다. 그 다음 줄에는 ‘수첩 2’에 적어 놓은 정수의 개수 M(1 ≤ M ≤ 1,000,000) 이 주어지고, 다음 줄에 ‘수첩 2’에 적어 놓은 정수들이 입력으로 M개 들어온다. 모든 정수들의 범위는 int 로 한다.
출력
‘수첩2’에 적혀있는 M개의 숫자 순서대로, ‘수첩1’에 있으면 1을, 없으면 0을 출력한다.
예제 입력 1 복사
1
5
4 1 5 2 3
5
1 3 7 9 5
예제 출력 1 복사
1
1
0
0
1
풀이
1) 이진 탐색
import sys
input = sys.stdin.readline
def binary_search(target, data):
start = 0
end = len(target) -1
while True:
if start > end:
return -1
mid = (start + end) //2
if target[mid] < data:
start = mid + 1
elif target[mid] > data:
end = mid - 1
else:
return mid
T =int(input())
for i in range(T):
N = int(input())
note1 = list(map(int,input().split()))
M = int(input())
note2 = list(map(int,input().split()))
note1.sort()
for num in note2:
if binary_search(note1, num) >= 0:
print(1)
else:
print(0)
2) set 과 in 사용
set 함수는 중복된 값을 제거하거나, 데이터의 유무를 확인하는 데 주로 사용된다. 또한 순서가 없는 자료형이다.
in 키워드는 어떤 값이 특정 시퀀스(리스트, 튜플, 문자열 등) 혹은 컬렉션(딕셔너리, 집합 등) 안에 존재하는지 검사하는 연산자이다.
import sys
input = sys.stdin.readline
T = int(input())
for i in range(T):
n = int(input())
note1 = set(map(int,input().split()))
m = int(input())
note2 = list(map(int,input().split()))
for num in note2:
if num in note1:
print(1)
else:
print(0)
'백준' 카테고리의 다른 글
[백준] 10989 수 정렬하기3 (파이썬) (1) | 2024.02.21 |
---|---|
[백준] 10816번 숫자 카드 2 (파이썬) (0) | 2024.02.16 |
[백준] 9012번 괄호 (파이썬) (1) | 2024.02.13 |
[백준] 2667번 단지번호붙이기 (파이썬) (1) | 2024.02.11 |
[백준] 1964 신입사원 (파이썬) (0) | 2024.01.31 |