๐Ÿ“๋ฐฑ์ค€ #4158

Jeongyeon Kimยท2022๋…„ 9์›” 16์ผ
0

โ—ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค

n, m = map(int, input().split())

array1 = [int(input()) for _ in range(n)]
array2 = [int(input()) for _ in range(m)]

cnt = 0
for i in array2:
  start = 0
  end = n - 1
  while start <= end:
    mid = (start + end) // 2
    if array1[mid] == i:
      cnt += 1
      break
    elif array1[mid] < i:
      start = mid + 1
    else:
      end = mid - 1

print(cnt)

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋น„์Šทํ•œ ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ์ œ์ถœ์„ ํ–ˆ๋Š”๋ฐ ๋ชจ๋‘ ํ‹€๋ ธ๋‹ค๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค.
๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝ์–ด๋ณด๋‹ˆ ์ฒซ ๋ฌธ์žฅ์— '์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.' ๋ผ๊ณ  ์“ฐ์—ฌ ์žˆ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ๋ฌธ์žฅ์— '์ž…๋ ฅ์˜ ๋งˆ์ง€๋ง‰ ์ค„์—๋Š” 0 0์ด ์ฃผ์–ด์ง„๋‹ค.'๋ผ๊ณ  ์“ฐ์—ฌ์žˆ์—ˆ๋‹ค.
n๊ณผ m์„ ํ•œ ๋ฒˆ๋งŒ ์ž…๋ ฅ ๋ฐ›๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  0 0์ด ์ž…๋ ฅ๋˜๋ฉด ์ข…๋ฃŒํ•˜๋Š” ์กฐ๊ฑด์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

โ—์‹œ๊ฐ„ ์ดˆ๊ณผ

while True:
  n, m = map(int, input().split())
  if n == 0 and m == 0:
    break
    
  array1 = [int(input()) for _ in range(n)]
  array2 = [int(input()) for _ in range(m)]

  cnt = 0
  for i in array2:
    start = 0
    end = n - 1
    while start <= end:
      mid = (start + end) // 2
      if array1[mid] == i:
        cnt += 1
        break
      elif array1[mid] < i:
        start = mid + 1
      else:
        end = mid - 1

	print(cnt)

์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

import sys

while True:
  n, m = map(int, sys.stdin.readline().split())
  if n == 0 and m == 0:
    break
    
  array1 = [int(sys.stdin.readline()) for _ in range(n)]
  array2 = [int(sys.stdin.readline()) for _ in range(m)]

  cnt = 0
  for i in array2:
    start = 0
    end = n - 1
    while start <= end:
      mid = (start + end) // 2
      if array1[mid] == i:
        cnt += 1
        break
      elif array1[mid] < i:
        start = mid + 1
      else:
        end = mid - 1
  print(cnt)

์ด์ „ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์•Œ๊ฒŒ๋œ sys ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ sys.stdin.readline() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด input ์‹œ๊ฐ„์„ ์ค„์˜€๋Š”๋ฐ๋„ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค์‹œ ๋ฐœ์ƒํ–ˆ๋‹ค.

๐ŸŒŸ ์ง‘ํ•ฉ ์ž๋ฃŒํ˜• ์ด์šฉ

import sys

while True:
  n, m = map(int, sys.stdin.readline().split())
  if n == 0 and m == 0:
    break
    
  array1 = set(int(sys.stdin.readline()) for _ in range(n))
  array2 = [int(sys.stdin.readline()) for _ in range(m)]

  cnt = 0
  for i in array2:
    if i in array1:
      cnt += 1
  print(cnt)

์˜ค๋Š˜ ์ด์ง„ ํƒ์ƒ‰์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•œ ์ฝ”๋“œ๊ฐ€ ๋– ์˜ฌ๋ผ ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•ด์„œ array2 ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ง‘ํ•ฉ array1์— ์žˆ์œผ๋ฉด cnt๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค.
์ˆ˜์ • ๊ฒฐ๊ณผ ๋งž์•˜์Šต๋‹ˆ๋‹ค!!๊ฐ€ ๋‚˜์™”๋‹ค.

๐Ÿง Why?

์™œ ์ง‘ํ•ฉ ์ž๋ฃŒํ˜•์„ ์“ฐ๊ธฐ ์ „ ์ฝ”๋“œ์—์„œ ์‹œ๊ฐ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๊นŒ?

์•„์ง ๋‹ต์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค.
๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค.

๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ์— defaultdic๊ฐ€ ์“ฐ์—ฌ ์žˆ์—ˆ๋‹ค.
dictionary์—์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ KeyError exception์ด ๋ฐœ์ƒํ•˜๋Š”๋ฐ 
defaultdict์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ‚ค๋ฅผ ์กฐํšŒํ•˜๋ฉด ์„ค์ •ํ•œ ๋””ํดํŠธ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•œ ์•„์ดํ…œ์„ dictionary์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
profile
Backend Developer๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€