[2295] 세 수의 합 ( 이분탐색 )

may.log·2024년 7월 9일

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 / 이분탐색을 활용할 수 있어야 한다.

0개의 댓글