https://www.acmicpc.net/problem/2295
이분탐색 문제인건 알겠음.
구간 내에서 target 값 찾는거니깐.
여기서 수학적 사고가 필요함.
x + y + z = k
k가 집합에 포함된 원소인지 판별해야 함.
ex) 2 + 3 + 5 = 10
2 + 3 = 10 - 5
x + y = k - z 가 성립함.
당연한 거임.
서로 같거나 다른 숫자 2개를 더한 배열을 선언함.
이게 x + y 가 가질 수 있는 값들임.
# x,y가 가질 수 있는 값
for i in range(n):
for j in range(j, n):
# 1. x + y값이 중복되지 않게 0부터 설정하지 않음.
# 2. x, y 는 서로 같은 값을 가질 수 있으니깐 j부터로 선언함.
sum.append(arr[i] + arr[j])
> sum은 x+y가 가질 수 있는값.
> 다음으로 해야될 일은 ?
x+y가 가질수 있는 값 리스트 중에서, k-z 가 있는지 판별.
k-z의 값은
for i in range(n): # i는 k를 따른다.
for j in range(n): # j는 z를 따른다.
if binary_search(arr[i] - arr[j]):
# 값 갱신
수학적 사고를 할 수 있느냐가 관건인 문제.
k도 집합에 포함된 값임을 인지해서 x + y = k - z / 이분탐색을 활용할 수 있어야 한다.