본문 바로가기
Algorithm/백준

백준 1253번 좋다 python

by eclipse7727 2022. 7. 1.

현재 선택한 값을 만들 수 있는 두 수를 배열에서 찾아야한다.

만약 없다면 -1

있으면 배열에서 있는 개수만큼 찾아서 반환

 

투 포인터로 해결 가능한 문제이다.

leftIndex(배열 왼쪽 끝, 0), rightIndex(오른쪽 끝, len(arr)-1 ) 을 초기값으로 두고

특정 조건에 따라 leftIndex를 +1 오른쪽, rightIndex를 -1 한다.

조건에따라 현재 선택한 값을 만들 수 있는 두 수를 찾으면 count+=1

 

시간복잡도는 

입력 배열 전체를 체크해야하므로 O(N)

입력값 하나당 left~right 까지 체크 O(N)

O(N^2)

import sys
input = sys.stdin.readline

N = int(input())
arr = list(map(int, input().strip().split(' ')))
arr.sort()
count = 0

for i in range(len(arr)):
    left = 0
    right = len(arr)-1
    while left < right:
        if left == i:
            left += 1
            continue
        if right == i:
            right -= 1
            continue
        sumValue = arr[left]+arr[right]
        # print(sumValue, left, right, arr[left], arr[right])
        if sumValue == arr[i]:
            count += 1
            break
        elif sumValue > arr[i]:
            right -= 1
        else:
            left += 1
print(count)
반응형

'Algorithm > 백준' 카테고리의 다른 글

백준 카드 섞기 1091번 javacript  (0) 2022.07.04
백준 오목 2072번 python  (0) 2022.07.01
백준 도서관 1461 python  (0) 2022.06.30
백준 최소비용 구하기 성공 1916 javascript  (0) 2022.06.30
콘센트 23843 python  (0) 2022.06.29

댓글