1번 문제.
https://www.acmicpc.net/problem/2776
-> 암기왕
① 답은 나오지만 시간 초과
import time
start = time.time() # 시작시간 저장
import sys
# 테스트 케이스 개수 -> t
t = int(sys.stdin.readline())
# 테스트 케이스만큼 반복
for i in range(t) :
# 연종이 본 정수 개수 -> n
n = int(sys.stdin.readline())
# 연종이 본 정수들 -> note1
note1 = list(map(int, sys.stdin.readline().split()))
# 동규가 받아 적은 정수 개수 -> m
m = int(sys.stdin.readline())
# 동규가 받아 적은 정수들 -> note2
note2 = list(map(int, sys.stdin.readline().split()))
# note2 정수를 보면서 note1과 비교 반복
for number in note2 :
if number in note1 :
print(1)
else :
print(0)
print(f"측정된 시간 : {time.time() - start}") # 단위는 초
② 백준 통과...
import time
start = time.time() # 시작시간 저장
import sys
# 테스트 케이스 개수 -> t
t = int(sys.stdin.readline())
# 테스트 케이스만큼 반복
for i in range(t) :
# 연종이 본 정수 개수 -> n
n = int(sys.stdin.readline())
# 연종이 본 정수들 -> note1
note1 = list(map(int, sys.stdin.readline().split()))
# 동규가 받아 적은 정수 개수 -> m
m = int(sys.stdin.readline())
# 동규가 받아 적은 정수들 -> note2
note2 = list(map(int, sys.stdin.readline().split()))
# note2 정수를 보면서 note1과 비교 반복
for number in note2 :
if number in note1 :
print(1)
else :
print(0)
print(f"측정된 시간 : {time.time() - start}") # 단위는 초
1번 문제에서 list를 set으로 변경하였더니 시간 안에 풀 수 있었다. 이 문제를 이분탐색으로 풀면 빠르게 나오는 것 같다.
이분탐색을 더 알아볼 것
2번 문제.
https://www.acmicpc.net/problem/2108
-> 문제이름
import sys
# 테스트케이스 수
t = int(sys.stdin.readline())
for i in range(t) :
# 지원자수
applicant_cnt= int(sys.stdin.readline())
grade = []
for applicant in range(applicant_cnt) :
grade.append(list(map(int, sys.stdin.readline().split())))
grade.sort()
# print(grade) # -> 여기서 결과가 5를 기준으로 [[1, 4], [2, 3], [3, 2], [4, 1], [5, 5]] 나옴
# 최대값은 순위가 가장 높은 사람의 것이므로
max = grade[0][1]
# 합격자 수 초기화
success = 1
# 1등 합격자는 제외하고 생각할 것이므로
for j in range(1, applicant_cnt) :
# 1등의 2번째 값을 비교
if max > grade[j][1] :
success += 1
max = grade[j][1]
print(success)