728x90
<문제>
N개의 원소를 포함하고 있는 수열이 오름차순으로 정렬되어 있습니다. 이때 이 수열에서 x가 등장하는 횟수를 계산하세요. 예를 들어 수열 {1,1,2,2,2,2,3}이 있을 때 x=2라면, 현재 수열에서 값이 2인 원소가 4개이므로 4를 출력합니다.
단, 이 문제는 시간 복잡도 O(logN)으로 알고리즘을 설계하지 않으면 '시간 초과' 판정을 받습니다.
<입력 조건>
- 첫째 줄에 N과 x가 정수 형태로 공백으로 구분되어 입력됩니다. (1 <=N <=1,000,000), (-10e9 <= x <=10e9)
- 둘째 줄에 N개의 원소가 정수 형태로 공백으로 구분되어 입력됩니다. (-10e9 <=각 원소의 값 <=10e9)
<출력 조건>
- 수열의 원소 중에서 값이 x인 원소의 개수를 출력합니다. 단, 값이 x인 원소가 하나도 없다면 -1을 출력합니다.
<문제 풀이>
- x의 값이 배열에 들어가는 인덱스를 반환해주는 파이썬 라이브러리 bisect 사용
- 왼쪽 인덱스는 x가 처음 나오는 위치고, 오른쪽 인덱스는 x의 마지막 위치이므로 오른쪽 인덱스와 왼쪽 인덱스의 차를 구함
<코드>
#220329
'''입력 예시
7 2
1 1 2 2 2 2 3
7 4
1 1 2 2 2 2 3
'''
from bisect import bisect_left, bisect_right
n,x = map(int, input().split())
num = list(map(int,input().split()))
left = bisect_left(num,x)
right = bisect_right(num,x)
result = right-left
if result==0:
print(-1)
else:
print(result)
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[탐욕법] 난이도1, 2019 SW 마에스트로 입학 테스트 '볼링공 고르기' (Python) (0) | 2021.11.26 |
---|---|
[동적계획법] 프로그래머스 L3 '정수 삼각형' (Python) (0) | 2021.11.26 |
[이분탐색] 프로그래머스 L4 '가사 검색' (Python) (0) | 2021.11.25 |
[구현] 난이도1, Facebook 인터뷰 '문자열 재정렬' (Python) (0) | 2021.11.25 |
[구현] 난이도1, 백준 18406번 '럭키 스트레이트' (Python) (0) | 2021.11.25 |