728x90
반응형
https://www.acmicpc.net/problem/3151
3151번: 합이 0
Elly는 예상치 못하게 프로그래밍 대회를 준비하는 학생들을 가르칠 위기에 처했다. 대회는 정확히 3명으로 구성된 팀만 참가가 가능하다. 그러나 그녀가 가르칠 학생들에게는 큰 문제가 있었다.
www.acmicpc.net
문제 해결
- 3개의 수를 고르는 문제는 전형적으로 A[i] + A[j] + A[k] = c 에서 A[j] + A[k] = c - A[i]로 바꾼다.
- c= 0이므로 A[j]+A[k] = -A[i]를 찾는 문제
- 그러면 A[i]를 고정시키고 j와 k를 찾는 것이 편하다.
- 처음에 j= i+1 k=n-1으로 정하고 A[j]+A[k] >A[i]면 k를 내리고 A[j] + A[k] < A[i]이면 j를 올리는 식으로 j,k를 찾으면 된다.
CODE
def solve(s,e,g):
global answer
max_idx = n
while s<e:
temp = A[s] + A[e]
if temp < g:
s += 1
elif temp == g:
if A[s] == A[e]:
answer += e-s
else:
if max_idx > e:
max_idx = e
while max_idx > s and A[max_idx-1] == A[e]:
max_idx -= 1
answer += e - max_idx + 1
s += 1
else:
e -= 1
if __name__=='__main__':
n = int(input())
A = list(map(int, input().split()))
A.sort()
answer = 0
for i in range(n-2):
start = i+1
end = n-1
goal = -A[i]
solve(start,end,goal)
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2473 세 용액 (0) | 2023.04.24 |
---|---|
[python] 백준 1727 커플 만들기 (0) | 2023.04.24 |
[python] 백준 18869 멀티버스 Ⅱ (0) | 2023.04.24 |
[python] 백준 6198 옥상 정원 꾸미기 (1) | 2023.04.23 |
[python] 백준 16401 과자 나눠주기 (0) | 2023.04.23 |
댓글