PS (C, C++)

[백준/C++] 3649 로봇 프로젝트

최연재 2024. 11. 1. 22:52

 

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

 

코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#define FASTIO ios::sync_with_stdio(false); cin.tie(NULL);

int main() {
    FASTIO;
	int x, n;
	while (cin >> x >> n) {
		x *= 10000000;

		vector<int> v(n);
		for (int i = 0; i < n; i++) cin >> v[i];

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

		int s = 0, e = n - 1, sum;
		bool find = false;
		while (s < e && !find) {
			sum = v[s] + v[e];
			if (sum == x) {
				cout << "yes " << v[s] << " " << v[e] << "\n";
				find = true;
			} 

			if (sum > x) e--;
			else s++;
		}
		if (!find) cout << "danger\n";
	}
	return 0;
}

설명

레고 두 개의 합 = 구멍의 너비를 충족하는 경우를 찾으면 된다. 그리고 해당 경우가 여러 개일 경우 두 수 간 격차가 가장 큰 경우로 출력하면 되니 레고의 길이들을 오름차순 정렬한 후 투포인터를 사용했다.

 

느낀 점

처음에 문제를 읽고 바로 예제 입력을 봤는데 구멍의 너비와 레고 조각의 길이가 같은 단위인 줄 알고 당황했었다... 입력을 읽고 나서 제대로 파악해서 풀었다. 투 포인터를 이용해서 풀었다! 

'PS (C, C++)' 카테고리의 다른 글

[백준/C++] 11000 강의실 배정  (0) 2024.11.05
[백준/C++] 16434 드래곤 앤 던전  (0) 2024.11.03
[백준/C++] 3184 양  (0) 2024.10.29
[백준/C++] 14923 미로 탈출  (1) 2024.10.03
[백준/C++] 1600 말이 되고픈 원숭이  (0) 2024.10.03