[파이썬] 백준 3273 : 두 수의 합 (실버3)
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
문제
풀이
0. 방향성 생각
두 수의 합을 찾는 문제. 목표 goal이 있을 때 goal 보다 작은 수 i가 주어지면 goal-i가 리스트에 있는지 찾아주면 된다.
리스트의 크기가 최대 10^6이므로 탐색 시간을 줄이기 위해 set을 쓴다.
1. 카운팅
n = int(input())
arr = list(map(int,input().split()))
arr_set = set(arr)
goal = int(input())
count = 0
for i in arr:
if i<goal :
if goal-i in arr_set :
count += 1
print(count//2)
i가 goal보다 작은 경우에만 goal-i가 집합에 있는지 확인해주면 된다.
모든 쌍을 탐색해서 같은 경우에도 2번 탐색했으니 2로 나누어주면 된다.
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 백준 1780 : 종이의 개수 (실버2) (0) | 2023.06.05 |
---|---|
[파이썬] 백준 2630 : 색종이 만들기 (실버2) (0) | 2023.06.05 |
[파이썬] 백준 1002 : 터렛 (실버3) (0) | 2023.05.30 |
[파이썬] 백준 10819 : 차이를 최대로 (실버) (0) | 2023.05.26 |
[파이썬] 백준 2559 : 수열 (실버3) (0) | 2023.05.24 |
[파이썬] 백준 7869 : 두 원 (골드2) (0) | 2023.05.17 |
[파이썬] 백준 2166 : 다각형의 면적 (골드5) (0) | 2023.05.16 |
댓글