[백준] 3273번 두 수의 합

거북이·2023년 1월 19일
0

백준[실버3]

목록 보기
30/92
post-thumbnail

💡문제접근

  • 정렬을 시켜준 다음 투 포인터로 접근해서 문제를 해결할 수 있었다.
  • 이 때, 1 ≤ i < j ≤ n을 만족시키는데 i, j의 등호 관계에 =가 붙어 있지 않다는 점을 주의하자.

💡코드(메모리 : 41740KB, 시간 : 88ms)

n = int(input())
li = list(map(int, input().split()))
li.sort()
x = int(input())

i = 0
j = len(li)-1
cnt = 0
while True:
    if i >= j:
        break
    else:
        if li[i] + li[j] == x:
            i += 1
            cnt += 1
        elif li[i] + li[j] > x:
            j -= 1
        else:
            i += 1
print(cnt)

📌 투 포인터로 문제를 해결하는 방법

투 포인터 방식은 문제를 보고 어떻게 포인터를 설정해야할지 고민한 후에 인덱스에러를 범하지 않고 정확하게 접근할 수 있는 방법을 택해야 한다.

①. 두 개의 포인터를 시작점에 같이 두는 방법
②. 두 개의 포인터를 양 끝점에 두는 방법

💡소요시간 : 6m

0개의 댓글