๋ฐฑ์ค€ | Baekjoon

[๋ฐฑ์ค€][10816] ์ˆซ์ž ์นด๋“œ 2 | ํŒŒ์ด์ฌ | ์ด์ง„ํƒ์ƒ‰(์ด๋ถ„ํƒ์ƒ‰)

sungkshon 2024. 8. 18. 04:21
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/10816

 

๐Ÿ‘‰๊ตฌํ•ด์•ผ ํ•˜๋Š” ์ •๋‹ต

n๊ฐœ์˜ ์ˆซ์ž ์นด๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ •์ˆ˜ m๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ด ์ˆ˜๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆซ์ž ์นด๋“œ๋ฅผ ๋ช‡ ๊ฐœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

๐Ÿ‘‰์ฝ”๋“œ ์„ค๊ณ„ํ•˜๊ธฐ

1. ๋ฌธ์ œ์˜ input์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

2. ์ด์ง„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ target๊ฐ’๊ณผ ๊ฐ™์€ ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•ด์ค๋‹ˆ๋‹ค.

3. count๊ฐ’์„ returnํ•ด์ค๋‹ˆ๋‹ค.

 

๐Ÿ‘‰์‹œ๋„ ํšŒ์ฐจ ์ˆ˜์ • ์‚ฌํ•ญ

1. ์ฒซ๋ฒˆ์งธ ์‹œ๋„ : ์‹œ๊ฐ„ ์ดˆ๊ณผ

์‹คํŒจ ์›์ธ

    if arr[mid] == target:
            count += 1

 

2. ๋‘๋ฒˆ์งธ ์‹œ๋„ : ์‹œ๊ฐ„ ์ดˆ๊ณผ

   if arr[mid] == target:
            return arr.count(target)

์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •ํ›„ ๊ฒฐ๊ณผ๋ฌผ์ด ์ œ๋Œ€๋กœ ์ถœ๋ ฅ ๋˜์—ˆ์ง€๋งŒ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์™”๋‹ค. 

 

์‹œ๊ฐ„ ์ดˆ๊ณผ ์ฝ”๋“œ

import sys

n = int(sys.stdin.readline())
n_list = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
m_list = list(map(int, sys.stdin.readline().split()))

n_list.sort()

def binary_search(target, arr):
    start = 0
    end = len(arr) - 1

    while start <= end: # start๊ฐ€ end๋ฅผ ๋„˜์ง€ ์•Š๊ฒŒ
        mid = (start + end) // 2
        if arr[mid] == target:
            return arr.count(target)
        elif arr[mid] < target:
            start = mid +1
        else:
            end = mid - 1

for i in m_list:
    result = binary_search(i, n_list)
    if result == None:
        print(0, end =  " ")
    else:
        print(result, end = " ")

 

 

๐Ÿ‘‰์ •๋‹ต ์ฝ”๋“œ

import bisect
import sys

# 1. ๋ฌธ์ œ์˜ input์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.
N = int(sys.stdin.readline())
arr_n = list(map(int, sys.stdin.readline().split()))
M = int(sys.stdin.readline())
arr_m = list(map(int, sys.stdin.readline().split()))

# 2. ๋ฐฐ์—ด N์„ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
arr_n.sort()

# 3. ์ด๋ถ„ํƒ์ƒ‰์„ ํ™œ์šฉํ•ด M์•ˆ์˜ ๊ฐ๊ฐ์˜ ์›์†Œ์— ๋Œ€ํ•ด ์กด์žฌํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.
for x in arr_m:
    left = bisect.bisect_left(arr_n, x)
    right = bisect.bisect_right(arr_n, x)
    print(right-left, end=' ')
๋ฐ˜์‘ํ˜•