홍시홍의 프로그래밍

[백준 3649] 로봇 프로젝트 본문

알고리즘 문제풀이/백준

[백준 3649] 로봇 프로젝트

홍시홍 2020. 3. 9. 01:00

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

 

3649번: 로봇 프로젝트

문제 상근이와 선영이는 학교 숙제로 로봇을 만들고 있다. 로봇을 만들던 중에 구멍을 막을 두 레고 조각이 필요하다는 것을 깨달았다. 구멍의 너비는 x 센티미터이고, 구멍에 넣을 두 조각의 길이의 합은 구멍의 너비와 정확하게 일치해야 한다. 정확하게 일치하지 않으면, 프로젝트 시연을 할 때 로봇은 부수어질 것이고 상근이와 선영이는 F를 받게 된다. 구멍은 항상 두 조각으로 막아야 한다. 지난밤, 상근이와 선영이는 물리 실험실에 들어가서 레고 조각의 크기를

www.acmicpc.net

요구사항

2개의 레고를 골라서 구멍을 막을 수 있는지 없는지 확인하기

 

풀이

1. 정렬

2. 앞과 뒤의 index로부터 합을 검사하며 정답 체크

3. 구멍크기보다 크면 j--, 작으면 i++

 

flag 초기화 안시켜서 한참을 고생고생고생

 

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
typedef long long ll;
struct go {
	ll sum;
	ll x;
	ll y;
};
ll x;
ll n;
ll map[10001000];
ll flag = 0;
bool com(go a, go b) {
	if (a.sum > b.sum) return true;
	return false;
}
//100,000,000 10센치 100,000,000나노미터
vector<go> v;
ll ansx;
ll ansy;
void solve()
{
	ll i = 0;
	ll j = n - 1;
	ll minv = map[i];
	ll maxv = map[j];
	ll newn = x * 10000000;
	//10000000
	while (i < j) {
		ll nowv = map[i] + map[j];
		//	cout << "newn " << newn << " nowv " << nowv << endl;
		if (nowv == newn) {
			ansx = map[i];
			ansy = map[j];
			flag = 1;
			return;
		}
		else if (nowv < newn) {
			i++;
		}
		else if (nowv > newn) {
			j--;
		}
	}

}
int main() {
	while (scanf("%lld", &x) == 1) {
		scanf("%lld", &n);
		flag = 0;
		v.clear();
		for (int i = 0; i < n; i++) {
			scanf("%lld", &map[i]);
		}
		sort(map, map + n);
		solve();
		if (flag == 1) {
			printf("yes %lld %lld\n", ansx, ansy);
		}
		else {
			printf("danger\n");
		}
	}

}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 10423] 전기가 부족해  (0) 2020.03.10
[백준 13418] 학교 탐방하기  (0) 2020.03.09
[백준 7469] k번째 수  (0) 2020.03.08
[백준 2399] 거리의 합  (0) 2020.03.08
[백준 1202] 보석 도둑  (0) 2020.03.08
Comments