[백준] 3273 - 두 수의 합
1. 문제
2. 개요
n개의 서로 다른 양수로 이루어진 수열이 있다.
자연수 x가 주어졌을 때 이 수열에서 ai + aj = x 를 만족하는 ai, aj순서쌍의 개수를 구하는 문제.
3. 풀이 및 코드
3-1. 풀이
먼저 수열을 오름차순 정렬한다.
두 포인터 l, r을 각각 수열의 양 끝 값으로 잡는다.
두 포인터의 값의 합이 x라면 답을 1만큼 늘리고 l, r 을 각각 1씩 늘리고 줄인다.
x 미만이라면 l을 1 늘리고, x 초과라면 r을 1 줄인다.
이를 l 이 r 이상이 될 때 까지 반복해서 진행한다.
반복이 끝났다면 답을 출력한다.
3-2. Python
import sys
n = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
x = int(sys.stdin.readline())
nums.sort()
l, r = 0, n-1
answer = 0
while l < r:
if nums[l] + nums[r] == x:
l += 1
r -= 1
answer += 1
elif nums[l] + nums[r] < x:
l += 1
else:
r -= 1
print(answer)
3-3. C#
namespace boj_3273
{
internal class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
int[] nums = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int x = int.Parse(Console.ReadLine());
Array.Sort(nums);
int answer = 0;
int l = 0;
int r = n - 1;
while (l < r)
{
if (nums[l] + nums[r] == x)
{
l++;
r--;
answer++;
}
else if (nums[l] + nums[r] < x)
l++;
else
r--;
}
Console.WriteLine(answer);
}
}
}
Comments