728x90
반응형
https://www.acmicpc.net/problem/3273
문제
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)
출력
문제의 조건을 만족하는 쌍의 개수를 출력한다.
코드
내가 한 풀이
n = int(input())
array = sorted(list(map(int, input().split())))
m = int(input())
result = 0
s, e = 0, 1
if n == 1:
if array[0] == m:
print(1)
else:
print(0)
exit()
else:
total = array[0] + array[1]
while s < e:
if total < m:
if e < n-1:
total -= array[e]
e += 1
total += array[e]
else:
total -= array[s]
s += 1
total += array[s]
elif total > m:
if s < e:
total -= array[e]
e -= 1
total += array[e]
if total < m:
total -= array[s]
s += 1
total += array[s]
else:
break
else:
result += 1
total -= array[s]
s += 1
total += array[s]
print(result)
다른 사람들이 더 깔끔하게 한 풀이가 있길래 작성해둔다.
n = int(input())
array = sorted(list(map(int, input().split())))
m = int(input())
result = 0
s, e = 0, n-1
while s < e:
tmp = array[s] + array[e]
if tmp < m:
s += 1
elif tmp > m:
e -= 1
else:
result += 1
s += 1
e -= 1
print(result)
728x90
반응형
'코딩테스트 준비 > 백준' 카테고리의 다른 글
[백준] 2018번 : 수들의 합 5 (0) | 2023.08.03 |
---|---|
[백준] 1940번 : 주몽 (0) | 2023.08.03 |
[백준] 11728번 : 배열 합치기 (0) | 2023.08.03 |
[백준] 1806번 : 부분합 (파이썬, Python) (0) | 2023.08.02 |
[백준] 2961번 : 도영이가 만든 맛있는 음식 (파이썬, Python) (0) | 2023.07.31 |