알고리즘/파이썬

[파이썬 알고리즘] 이코테Q27 - 정렬된 배열에서 특징 수의 개수 구하기

귤먹는코더 2022. 5. 30. 11:15
728x90
문제

N개의 원소를 포함하고 있는 수열이 오름차순으로 정렬되어 있다. 이 때 이 수열에서 x가 등장하는 횟수를 계산하세요. 예를 들어 수열 [1, 1, 2, 2, 2, 2, 3} 이 있을때 x =2 라면, 현재 수열에서 값이 2인 원소가 4개이므로 4를 출력합니다.

단, 이 문제는 시간 복잡도 O(logN)으로 알고리즘을 설계하지 않으면 '시간 초과' 판정을 받습니다.

 

입력 조건
  • 첫째 줄에 N과 x가 정수 형태로 공백으로 구분되어 입력됩니다.

(1 <= N <= 1,000,000), (-10^9 <= x <= 10^9)

 

  • 둘째 줄에 N개의 원소가 정수 형태로 공백으로 구분되어 입력됩니다.

( -10^9  <= 각 원소의 값 <= 10^9)

 

출력 조건
  • 수열의 원소 중에서 값이 x인 원소의 개수를 출력합니다. 단, 값이 x인 원소가 하나도 없다면 -1을 출력합니다.

입력 예시 1

7 2

1 1 2 2 2 2 3

 

출력 예시 1

4

 

입력 예시 2

7 4

1 1 2 2 2 2 3

 

출력 예시 2

-1

 

코드
import bisect


def count_number(lst, target):
    left_idx = bisect.bisect_left(lst, target)
    if not (0 <= left_idx < len(lst) and lst[left_idx] == target):
        return -1

    right_idx = bisect.bisect_right(lst, target)
    return right_idx - left_idx


n, x = map(int, input().split())
array = list(map(int, input().split()))

print(count_number(array, x))

 

728x90