문제
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)
'Koala - 11기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/C++] 2473번: 세 용액 (0) | 2023.07.30 |
---|---|
[백준/C++] 2003번 : 수들의 합 2 (1) | 2023.07.30 |
[C++] 백준 15686번: 치킨 배달 (0) | 2023.07.30 |
[백준/Java] 14499 주사위 굴리기 (0) | 2023.07.30 |
[백준/C++] 2467번: 용액 (0) | 2023.07.28 |