백준 온라인 저지, 이진탐색 / 1253번: 좋다 (파이썬 / 백준 골드문제)
2021. 11. 24. 23:01ㆍ알고리즘/이진탐색
728x90
반응형
문제
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.
수의 위치가 다르면 값이 같아도 다른 수이다.
입력
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
출력
좋은 수의 개수를 첫 번째 줄에 출력한다.
예제 입력 1
10 1 2 3 4 5 6 7 8 9 10
예제 출력 1
8
힌트
3,4,5,6,7,8,9,10은 좋다.
접근 방법
- 주어진 숫자를 정렬한 뒤 이중 반복문을 통해 숫자를 하나씩 탐색하며 이진탐색을 통해 값을 구한다.
코드
# 접근 방법
# 주어진 숫자를 정렬한 뒤 이중 반복문을 통해 숫자를 하나씩 탐색하며 이진탐색을 통해 값을 구한다.
n = int(input())
array = list(map(int, input().split()))
array.sort()
count = 0
for i in range(n):
x = array[i]
for j in range(n):
if i == j:
continue
start = 0
end = n - 1
check = False
while start <= end:
mid = (start+end)//2
if x == array[j] + array[mid]:
m = mid
while i == m or j == m:
if m == 0:
break
m -= 1
if (i != m and j != m) and (x == array[j] + array[m]):
count += 1
check = True
break
m = mid
while i == m or j == m:
if m == n - 1:
break
m += 1
if (i != m and j != m) and (x == array[j] + array[m]):
count += 1
check = True
break
break
elif x > array[j] + array[mid]:
start = mid + 1
else:
end = mid - 1
if check:
break
print(count)
728x90
반응형
'알고리즘 > 이진탐색' 카테고리의 다른 글
백준 온라인 저지, 이진탐색 / 6209번: 제자리멀리뛰기 (파이썬 / , 백준 골드문제) (0) | 2021.12.01 |
---|---|
백준 온라인 저지, 이진탐색 / 3745번: 오름세 (파이썬 / 백준 골드문제) (0) | 2021.11.26 |
백준 온라인 저지, 이진탐색 / 2613번: 숫자구슬 (파이썬 / 백준 골드문제) (0) | 2021.11.16 |
백준 온라인 저지, 이진탐색 / 9024번: 두수의합 (파이썬 / 백준 골드문제) (0) | 2021.11.16 |
백준 온라인 저지, 이진탐색 / 2352번: 반도체설계 (파이썬 / 백준 골드문제) (0) | 2021.11.14 |