PS/BOJ

[Python] 4158번 CD

s_omi 2024. 7. 31. 11:00
728x90
반응형
SMALL

✏️ 문제


문제 파악

 

 

알고리즘

  • 자료 구조
  • 해시를 사용한 집합과 맵
  • 두 포인터
  • 이분 탐색

 

 

코드

  • 이분 탐색으로 풀려니까 자꾸 시간초과가 떠서 결국 pypy3로 제출 ㅠ
import sys
input = sys.stdin.readline

while True:
  n, m = map(int, input().split())
  if n == 0 and m == 0:
    break

  n_number = [int(input()) for _ in range(n)]
  m_number = [int(input()) for _ in range(m)]
  cd = 0

  for i in range(m):
    start, end = 0,  n-1

    while start <= end:
      mid = (start+end) // 2

      if n_number[mid] == m_number[i]:
        cd += 1
        break
      elif n_number[mid] > m_number[i]:
        end = mid - 1
      elif n_number[mid] < m_number[i]:
        start = mid + 1
  print(cd)

 

  • 이분 탐색으로 말고 집합으로 푸는 방법
import sys
input = sys.stdin.readline

while True:
  n, m = map(int, input().split())
  n_number = {int(input()) for _ in range(n)}
  m_number = {int(input()) for _ in range(m)}

  if n == 0 and m == 0:
    break
  
  print(len(n_number & m_number)) # 교집합
728x90
반응형
LIST

'PS > BOJ' 카테고리의 다른 글

[Python] 11663번 선분 위의 점  (0) 2024.08.05
[Python] 2428번 표절  (0) 2024.08.05
[Python] 13702번 이상한 술집  (0) 2024.07.31
[Python] 1166번 선물  (0) 2024.07.31
[Python] 14627번 파닭파닭  (0) 2024.07.31