업데이트:

카테고리: , ,

1. 문제

문제는 링크에 들어가면 있다.

2. 정답 코드

문제의 내 정답 코드는 다음과 같다.

import sys
read = sys.stdin.readline
N = int(read())
M = int(read())

array = sorted(list(map(int,read().split())))

# 양끝을 처음으로 시작
# 값을 더했을 때, 목표값보다 작다면 왼쪽을 키워주고
# 목표값보다 크다면 오른쪽 값을 줄이자.
# left와 right 가 만나기 전까지 실행

left_idx = 0
right_idx = N-1

results = 0
while left_idx<right_idx :
    left = array[left_idx]
    right = array[right_idx]

    temp_sum = left+right
    if temp_sum == M :
        results+=1
        # 사용했으니 두 idx를 옮겨주자
        left_idx += 1
        right_idx -= 1
    elif temp_sum < M :
        # 더한게 작다면 left를 올리자
        left_idx += 1
    else :
        right_idx -= 1

print(results)




3. 풀이 및 생각


문제 풀이

이 문제가 전형적인 투포인터의 기본 형식인것 같다. array를 정렬한 후, 끝값들을 지목해서(투포인터) 기준 값에 따라 두개의 포인터를 움직여가면서 조건을 따져보자.


나의 생각

전형적인 형식이므로, 꼭 숙지하도록하자.

최대 1 분 소요