https://www.acmicpc.net/problem/1253
1. 처음의 시간초과 풀이
n = int(input())
nums = list(map(int,input().split()))
nums.sort()
if n == 1 or n == 2:
print(0)
else:
cnt = 0
for i in range(2, n):
flag = True
for j in range(n):
if flag == False:
break
add = 1
while j+add <= n-1:
num1 = nums[j]
num2 = nums[j+add]
if num1 + num2 == nums[i]:
cnt += 1
flag = False
break
add += 1
print(cnt)
2. 투포인터 사용의 올바른 예
n = int(input())
nums = list(map(int,input().split()))
nums.sort()
cnt = 0
for i in range(n):
target = nums[i] # 타겟 하나 정하기
left, right = 0, n-1
while left < right:
# 현재 숫자는 타겟에서 제외
if left == i:
left += 1
continue
if right == i:
right -= 1
continue
sum_two = nums[left] + nums[right]
if sum_two == target:
cnt += 1
break
elif sum_two < target:
left += 1
else:
right -= 1
print(cnt)
'백준' 카테고리의 다른 글
백준 1461. 도서관 (0) | 2024.11.07 |
---|---|
백준 18352. 특정 거리의 도시 찾기 (0) | 2024.11.06 |
백준 4485. 녹색 옷 입은 애가 젤다지? (0) | 2024.11.04 |
백준 1865. 웜홀 (0) | 2024.11.03 |
백준 1197. 최소 스패닝 트리 (0) | 2024.11.03 |