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
'알고리즘 > 파이썬' 카테고리의 다른 글
[파이썬 알고리즘] 이코테Q29 - 공유기 설치 (0) | 2022.05.30 |
---|---|
[파이썬 알고리즘] 이코테Q28 - 고정점 찾기 (0) | 2022.05.30 |
[파이썬 알고리즘] 이코테 - 부품찾기 (0) | 2022.05.28 |
[파이썬 알고리즘] 75.leetcode - Sort Colors (0) | 2022.05.27 |
[파이썬 알고리즘]973.leetcode - 원점에 k번째로 가까운 점 (0) | 2022.05.27 |