Koala - 11기/코딩테스트 준비 스터디

[백준 / Python] 1253번 : 좋다

kwonlabong 2023. 7. 30. 21:45

문제

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


풀이

입력받은 리스트(li)를 정렬한다.

반복문을 통해 선택된 수를 제외한 새로운 리스트(arr)를 만든다.

투 포인터를 이용하여 새 리스트를 양 끝에서 탐색한다.

두 수의 합과 선택한 수를 비교한다.

  • li[i] == val이면 cnt를 증가시키고 while문을 종료한다.
  • li[i] > val이면 l을 증가시킨다.
  • li[i] < val이면 r을 감소시킨다.

코드

n = int(input())
li = sorted([*map(int, input().split())])
cnt = 0

for i in range(n):
    arr = li[:i] + li[i + 1:]
    l, r = 0, len(arr) - 1
    while l < r:
        val = arr[l] + arr[r]
        if li[i] == val:
            cnt += 1
            break
        elif li[i] > val:
            l += 1
        else:
            r -= 1

print(cnt)