카테고리 없음

[C] 백준 - 2467번: 용액

C0MPAS 2024. 6. 12. 13:30

6월 12일(수) - 이분 탐색(2467번)

https://www.acmicpc.net/problem/2467


최초 생각 정리

- 이전에 풀었던 "2470번: 두 용액"의 풀이와 유사하게 진행하면 될 것을 예상

 

[C] 백준 - 2470번: 두 용액

5월 29일(수) - 이분 탐색(2470번)https://www.acmicpc.net/problem/2470최초 생각 정리문제점1. int min = INT_MAX를 써놓고, 헤더파일을 빼먹어서 컴파일 오류만 6번 발생풀이 - 1(C언어 풀이)#define _CRT_SECURE_NO_WARNING

jh4995.tistory.com

 


문제점

1. 예제 2를 입력하는 경우 "-2 -1"이 아니라 "-100 103"이 출력

-> 혹시나해서 그냥 제출했더니 정답처리...


풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h>

int arr[100001];

int compare(const void* a, const void* b)
{
	int num1 = *(int*)a;
	int num2 = *(int*)b;

	if (num1 > num2)
	{
		return 1;
	}
	else if (num1 < num2)
	{
		return -1;
	}
	else
	{
		return 0;
	}
}

int main(void)
{
	int N;
	scanf("%d", &N);

	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}

	//qsort(arr, N, sizeof(int), compare);

	int left = 0;
	int right = N - 1;
	int min = INT_MAX;
	int res_A = 0;
	int res_B = 0;

	while (left < right)
	{
		int sum = abs(arr[left] + arr[right]);

		if (sum < min)
		{
			min = sum;
			res_A = left;
			res_B = right;

			if (sum == 0)
			{
				break;
			}
		}

		if (abs(arr[left]) < abs(arr[right]))
		{
			right--;
		}

		else
		{
			left++;
		}
	}

	printf("%d %d\n", arr[res_A], arr[res_B]);
	return 0;
}