3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
접근 방법
알고리즘 : 투포인터, 배열
1. n의 최대값이 100000으로 O(n^2)으로는 시간초과 발생
2. Javascript로는 투포인터 c++은 배열을 활용하여 풀이
Javascript
/**
* 제출용. 아래 로컬용을 지우고 제출하자.
*/
// let input = require("fs").readFileSync("/dev/stdin").toString().trim().split("\n")
/**
* 로컬용, 예제.txt를 생성해서 예제를 복붙하자.
*/
function solution() {
let input = require("fs")
.readFileSync("input.txt") //"/dev/stdin"
.toString()
.trim()
.split("\n")
.map((val) => val.trim());
let n = +input.splice(0, 1)[0];
let arr = input[0].split(" ").map((v) => +v);
let x = +input[1];
arr.sort((a, b) => a - b);
let cnt = 0;
let i = 0;
let j = n - 1;
while (i < j) {
if (arr[i] + arr[j] === x) {
i++;
cnt++;
} else if (arr[i] + arr[j] > x) {
j--;
} else {
i++;
}
}
console.log(cnt);
}
solution();
C++
#include <bits/stdc++.h>
using namespace std;
int main()
{
freopen("input.txt", "r", stdin); //제출 시 삭제
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n,x;
cin>>n;
int arr[n];
bool occur[2000001];
for(int i=0;i<n;i++) {
cin>>arr[i];
}
cin>>x;
int cnt =0;
for(int i=0;i<n;i++){
if(x-arr[i]>0 && occur[x-arr[i]]) cnt++;
occur[arr[i]]= true;
}
cout<<cnt<<"\n";
}
'코딩테스트(알고리즘) > baekjoon' 카테고리의 다른 글
[baekjoon] 탑 2493 (Javascript,c++) (0) | 2022.06.15 |
---|---|
[baekjoon] 키로거 5397 (Javascript,c++) (0) | 2022.06.14 |
[baekjoon] 에디터 1406 (c++) (0) | 2022.06.14 |
[baekjoon] 카드 2 2164 (Javascript,c++) (0) | 2022.06.13 |
[baekjoon] 1920 수찾기 (Javascript, c++) (0) | 2022.06.13 |