티스토리 뷰

"""
N개의 원소를 포함하고 있는 수열이 오름차순으로 정렬되어 있습니다. 이때 이 수열에서 x가 등장하는 횟수를 계산하세요.
단, 이 문제의 시간 복잡도 O(logN)으로 알고리즘을 설계하지 않으면 '시간 초과' 판정을 받습니다.

입력 예시
7 2
1 1 2 2 2 2 3

출력 예시
4
"""
import bisect

"""
해당 문제를 푸는데 기억해야할 것은 '정렬'된 배열이라는 것이다.
즉, target의 숫자의 가장 왼쪽과 오른쪽 idx를 구한 후 해당 idx의 차이를 반환하면 된다.
"""
def solution(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


assert solution(lst=[1,1,2,2,2,2,3], target=2) == 4

특정 값의 인덱스를 bisect.bisect_left 모듈 함수를 사용하여 알아낸 후 bisect.bisect_right 모듈 함수를 이용하여 특정 값의 끝 이후 인덱스를 알아내어 두 값 사이의 차이를 도출하여 갯수를 알아낸다.

 

단, 처음 left_idx를 구할 때 해당 인덱스는 주어진 배열의 길이에 속해야 하며, 도출한 idx가 lst[idx]와 target 이 같은지 조건을 건다.

'알고리즘' 카테고리의 다른 글

Binary Search - Search in Rotated Sorted Array  (0) 2022.02.04
Binary Search  (0) 2022.02.04
dfs - 섬의 개수(number of islands)  (0) 2022.01.21
DFS (GRAPH)  (0) 2022.01.21
스택, 큐  (0) 2022.01.18
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함