[백준] 1940. 주몽

원숭2·2022년 2월 7일
0

백준

목록 보기
29/54

문제

풀이

  1. 배열을 크기순으로 정렬 함.
  2. 두개의 포인터를 양 끝에 두고 시작하고, 좌측 포인터 < 우측 포인터될 때까지 while문을 실행함.
  • 각각의 pointer가 가리킨 값에 따라 3가지 경우로 나뉨.
    1) 같을 경우 : 결과에 1을 추가한 후, 좌측 포인터는 +1, 좌측 포인터는 -1 하여 하나씩 옮겨줌.
    2) 클 경우 : 우측 포인터 값을 -1 해줌.
    3) 작을 경우 : 좌측 포인터 값을 +1 해줌.

코드

def solution() :
    n = int(input())
    target = int(input())
    arr = list(map(int, input().split()))
    
    arr.sort()
    res = 0
    left = 0
    right = n-1
    
    while left < right :
        if arr[left] + arr[right] == target :
            res += 1
            left += 1
            right -= 1
        elif arr[left] + arr[right] > target :
            right -= 1
        else :
            left += 1
    
    print(res)
    
solution()

0개의 댓글