백준 1940 : 주몽 (Python)

liliili·2022년 11월 1일

백준

목록 보기
7/214

본문 링크

N=int(input())
M=int(input())
L=sorted(list(map(int,input().split())))

count=0
start=0
end=N-1

while start<end:
    if L[start]+L[end]==M:
        count+=1
        start+=1
    elif L[start]+L[end]<M:
        start+=1
    else:
        end-=1

print(count)

📌 만들수 있는 갑옷의 개수를 어떻게 구할 것인가?

아주 기초적이고 전형적인 투 포인터 문제이다.
정렬된 리스트에서 start=0 , end=N-1로 잡고 두 수의 합이 M과 같으면 count 변수에 1을 더해준다.
만약 M보다 작다면 start를 증가시키고 M보다 크다면 end를 감소 시킨다.

✅ 코드에서 중요한 부분

  • 리스트는 정렬 시킨다.
  • while 문에서 start<end로 잡아준다. 투 포인터이기 때문에 이분탐색과는 다르게 start와 end는 같을 수 없다.
  • 만약 두 값의 합이 M일때는 start를 증가 시킨다.

0개의 댓글