시간복잡도 줄이기 2) 하나 고정하기

2025. 9. 30. 16:49·알고리즘(코딩테스트)

1. 하나 고정하고 나머지 값을 통해 찾기


  • 배열에서 세가지 값의 합을 구하는 등의 작업을 할 때, 하나의 값을 고정시켜두고 나머지 값들만 투포인터를 통해서 계산하기

 

2. 문제


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

  • 이 문제는"중간에서 만나기"를 쓰면 추가 공간이 필요하여 메모리가 터진다.
  • n = 5000이기 때문에 n^2은 25,000,000이 되고, 여기서 long long값과 인덱스 2개를 int로 저장하면
    • 25,000,000 * (8 + 4 + 4)  = 400,000,000 
    • 400MB 메모리 필요하므로 메모리 초과가 될 것이다.

 

풀이

더보기
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;

int n;
vector<long long> vec;
long long minValue = LLONG_MAX;
vector<long long> answer;

void Print()
{
	sort(answer.begin(), answer.end());

	for (const auto& a : answer)
	{
		cout << a << " ";
	}
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;

	for (int i = 0; i < n; ++i)
	{
		int num;
		cin >> num;
		vec.push_back(num);
	}

	sort(vec.begin(), vec.end());

	for (int i = 0; i < n - 2; ++i)
	{
		int l = i + 1;
		int r = n - 1;

		while (l < r)
		{
			long long temp = vec[i] + vec[l] + vec[r];

			if (abs(temp) < minValue)
			{
				minValue = abs(temp);

				answer.clear();
				answer.push_back(vec[i]);
				answer.push_back(vec[l]);
				answer.push_back(vec[r]);
			}

			if (temp < 0)
				l++;
			else if (temp > 0)
				r--;
			else
			{
				Print();
				return 0;
			}
		}
	}
	Print();
}

 

'알고리즘(코딩테스트)' 카테고리의 다른 글

시간복잡도 줄이기 1) 중간에서 만나기 (+이분탐색)  (0) 2025.09.24
트라이  (0) 2025.09.08
위상정렬  (0) 2025.09.07
플로이드  (2) 2025.08.08
문자열 관련  (0) 2025.05.20
'알고리즘(코딩테스트)' 카테고리의 다른 글
  • 시간복잡도 줄이기 1) 중간에서 만나기 (+이분탐색)
  • 트라이
  • 위상정렬
  • 플로이드
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    템플릿
    map을 vector로 복사
    상속
    blend pose
    applydamage
    actor 클래스
    DP
    const
    Vector
    additive animation
    motion matching
    gamestate
    매크로 지정자
    C++
    enhanced input system
    character animation
    싱글턴
    cin함수
    BFS
    addonscreendebugmessage
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
시간복잡도 줄이기 2) 하나 고정하기
상단으로

티스토리툴바