Mini
[맞음] 백준 3273 cpp // 두수의 차 visited 배열활용, 투포, 이분탐색 본문
https://www.acmicpc.net/problem/3273
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
* 기본개념
1. 목표가 100이고, 20이 현재값이면
visited[80]이 true -> 정답이 가능하다.
* 에러
out of bounds
원인 : visitied[x-v[i]]
해결 : x가 최대 20만 이므로 visited도 20만으로 선언
#include <bits/stdc++.h>
using namespace std;
int n, x, visited[2000004], ret;
vector<int> v;
int main() {
cin >> n;
for (int i = 0; i < n; ++i) {
int temp = 0;
cin >> temp;
v.push_back(temp);
visited[temp] = 1;
}
cin >> x;
for (int i = 0; i < n; ++i) {
if (x < v[i]) continue;
//목표보다 현재값이 큰경우 -> 불가
if (visited[x - v[i]]) { //목표값이 잇으면 ret++
ret++;
//cout << "v[i] : 목표값 " << v[i] << " " << x - v[i]<<endl;
}
else {
//pass
}
}
cout << ret / 2; //(1,3) 과 (3,1)을 중복처리제거.
}
* 25.1.30. 2회독
- lower_bound 값 찾았는지 확인방법
* 큰돌
- 예시로 관찰하면서 >, < , = 포인터 어떻게 가는지 탐색
- 삼각형 그림을 많이 그린다.
'Algorithm > 이분탐색' 카테고리의 다른 글
백준 1654 랜선자르기 c++ // 이분탐색, parametric search (0) | 2024.01.04 |
---|---|
백준 2295 세수의합 c++ // 이분탐색 발상 (0) | 2024.01.03 |
백준 18870 좌표압축 c++ // 이분탐색 (0) | 2024.01.02 |
백준 10816 숫자카드2 c++ // 이분탐색, upper_bound, lower_bound (0) | 2024.01.02 |
백준 1920 수찾기 c++ // 이분탐색 stl (0) | 2024.01.01 |