3273 - 두 수의 합

재찬·2023년 2월 7일
0

Algorithm

목록 보기
49/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

int n,a,sum,ret,res;
vector<int> v;


int main(){
	cin >> n;
	 for(int i = 0; i <n; i++){
	 	cin >> a;
	 	v.push_back(a);
	 }
	 cin >> res;
	 sort(v.begin(), v.end());
	 
	 
	 int lo = 0;
	 int hi = v.size() - 1;
	 while(1){
	 	sum = v[lo] + v[hi];
	 	if(sum > res) hi--;
	 	else if(sum <= res) lo++;
	 	if(hi < lo) break;
	 	if(sum == res) ret++;
	 }
	 cout << ret << '\n';
}

풀이

두 수 라는 말과 연속적인 idx? 느낌이면 투 포인터로 접근해보자 입력 값을 정렬한 후 처음과 끝을 포인터로 가리키고 원하는 입력 값보다 두 수의 합이 크면 hi를 내리고 작으면 lo를 올린다. 입력 값과 두 수의 합이 같으면 ret++해서 ret 출력

결과

후기

투 포인터라는 것만 인지했으면 바로 풀 수 있던 문제

0개의 댓글