백준 1253번 좋다 G4
문제
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
N개의 수가 주어지면 그중에서 좋은 수의 개수는 몇 개인지 출력하라.수의 위치가 다르면 값이 같아도 다른 수이다.
입력
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000)
두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
출력
좋은 수의 개수를 첫 번째 줄에 출력한다.
N이 매우 작아서 O(N^2) 풀이로도 풀리는 문제이다.
수를 오름차순으로 정렬한 후, 해당 조건에 맞게 두 포인터를 조정하면서 확인해 나갔다.
파이썬 코드 보기
더보기
import sys
n = int(sys.stdin.readline())
sub = list(map(int, sys.stdin.readline().split()))
sub.sort()
cnt = 0
for i in range(n):
s, e = 0, n-1
while s < e:
if s == i:
s += 1
if e == i:
e -= 1
if s>=e:
break
temp = sub[s] + sub[e]
if temp == sub[i]:
cnt += 1
break
if sub[i] < temp:
e -= 1
else:
s += 1
print(cnt)
두 포인터를 사용할 수 있는 좋은 예제 문제이다.
'알고리즘 문제 풀이 > 항해99 코테 스터디' 카테고리의 다른 글
[99클럽/파이썬 챌린저/12일차] 도넛과 막대 그래프 (0) | 2024.11.09 |
---|---|
[99클럽/파이썬 챌린저/11일차] 도서관 (0) | 2024.11.08 |
[99클럽/파이썬 챌린저/9일차] 다단계 칫솔 판매 (0) | 2024.11.05 |
[99클럽/파이썬 챌린저/8일차] 녹색 옷 입은 애가 젤다지? (0) | 2024.11.04 |
[99클럽/파이썬 챌린저/7일차] 노드 사이의 거리 (0) | 2024.11.03 |