Data Structure & Algorithm
[알고리즘-JS, Python] 백준 1253번: 좋다 (투 포인터)
fnow
2024. 3. 18. 12:12
반응형
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 "좋다(GOOD)"고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다.
풀이
JavaScript
const fs = require('fs');
const input = fs.readFileSync('input.txt').toString().trim().split('\n');
const N = parseInt(input[0]);
const A = input[1].split(' ').map(Number);
let Result = 0;
for (let k = 0; k < N; k++) {
let find = A[k];
let i = 0;
let j = N - 1;
while (i < j) {
if (A[i] + A[j] === find) {
if (i !== k && j !== k) {
Result++;
break;
} else if (i === k) {
i++;
} else if (j === k) {
j--;
}
} else if (A[i] + A[j] < find) {
i++;
} else {
j--;
}
}
}
console.log(Result);
Python
import sys
input = sys.stdin.readline
N = int(input())
Result = 0
A = list(map(int, input().split()))
A.sort()
for k in range(N):
find = A[k]
i = 0
j = N - 1
while i < j:
if A[i] + A[j] == find:
if (i != k and j != k):
Result += 1
break
elif (i == k):
i += 1
elif (j == k):
j -= 1
elif A[i] + A[j] < find:
i += 1
else:
j -= 1
print(Result)
반응형