문제
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.
수의 위치가 다르면 값이 같아도 다른 수이다.
풀이
- 리스트를 정렬한다.
- 0 ~ N-1까지 반복문을 돌면서 i번째 원소를 선택하고 이를 제외한 리스트(temp)를 생성한다.
- 이후 temp에서 두 포인터를 정하여 원소의 합(total)이 i번째 원소에 해당하는지 비교한다.
- total < list[i] : start 증가
- total > list[i] : end 감소
- total == list[i] : answer 증가 후 break
- 2, 3 과정을 반복한다
CODE
import sys
n = int(input())
num_list = list(map(int, sys.stdin.readline().split()))
num_list.sort()
answer = 0
for i in range(n):
temp = num_list[:i] + num_list[i+1:]
start, end = 0, len(temp)-1
while start < end :
total = temp[start] + temp[end]
if total == num_list[i]:
answer += 1
break
elif total < num_list[i]:
start += 1
else:
end -= 1
print(answer)
'CS > Coding Test' 카테고리의 다른 글
[백준] 19637: IF문 좀 대신 써줘 python 구현 / 이분 탐색(bisect) (1) | 2023.05.08 |
---|---|
[백준] 9935: 문자열 폭발 python 구현 / 스택(Stack) (0) | 2023.05.01 |
[백준] 4485: 녹색 옷 입은 애가 젤다지? python 구현 / 다익스트라(dijkstra) (0) | 2023.05.01 |
[백준] 22251: 빌런 호석 python 구현 / 완전 탐색 (0) | 2023.04.27 |
[백준] 2493: 탑 python 구현 / 스택(Stack) (0) | 2023.04.24 |
댓글