📚알고리즘/백준

[백준 1253번] 좋다 (Python/파이썬)

루오 2023. 1. 9. 15:51

https://www.acmicpc.net/problem/1253

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

투 포인터를 사용하는 문제로 백준 1940번과 상당히 유사한 문제이다. 

글쓴이 같은 경우는 투 포인터를 사용하기 위해 수들을 정렬해주고 더해서 나와야하는 수를 pop하여 저장했다가 반복이 끝나면 insert로 다시 추가하는 방식을 사용했다.

투 포인터에 대한것은 1940번에서 했기 때문에 생략한다.

코드는 다음과 같다.

 

import sys
input = sys.stdin.readline
N = int(input())
num = list(map(int, input().split()))
num.sort()
count = 0

for i in range(len(num)):
  target = num.pop(i)
  a = 0
  b = N-2
  while a < b:
    first = num[a]
    second = num[b]
    if first + second == target:
      count += 1
      num.insert(i,target)
      break
    elif first + second > target:
      b -= 1
    elif first + second < target:
      a += 1

  if len(num) != N:
    num.insert(i,target)
  else:
    pass

print(count)

 

 

1940번과 같이 생각해보면 투 포인터를 이해하기 정말 좋은 문제라고 생각한다.