알고리즘/SW Expert Academy

[D3] 9229. 한빈이와 Spot Mart

혬혬 2020. 3. 10. 18:22
728x90

정렬을 한 이후, 최소값(start_point)과 m보다 작은 최댓값(end_point) 2개를 가지고 두개의 합이 m보다 클 경우, end_point를 옮겨서 두 개의 합을 줄이도록 하였다. 두개의 합이 m보다 작을 경우, start_point를 옮겨서 두개의 합을 크게하도록하엿다.  

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;

int main(void) {
	freopen("inp.inp", "r", stdin);
	freopen("out.out", "w", stdout);
	
	int tc = 0;
	cin >> tc;
	for (int q = 0; q < tc; q++) {
		int n = 0;
		int m = 0;
		cin >> n >> m;
		int start_point = 0;
		int end_point = n-1;
		int snack_list[1010] = { 0 };
		for (int i = 0; i < n; i++) {
			cin >> snack_list[i];
			if (snack_list[i] <= m)
				end_point = i;
		}
		sort(snack_list, snack_list + n);
		int answer = -1;
		while (1) {
			if (start_point == end_point)
				break;
			if (snack_list[start_point] + snack_list[end_point] <= m&&answer< snack_list[start_point] + snack_list[end_point]) {
				answer = snack_list[start_point] + snack_list[end_point];
			}
			if (snack_list[start_point] + snack_list[end_point] > m) {
				end_point--;
			}
			else if(snack_list[start_point] + snack_list[end_point] <= m){
				start_point++;
			}
		}
		cout <<"#"<<q+1<<" "<< answer<<endl;
	}


	return 0;
}

 

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AW8Wj7cqbY0DFAXN&categoryId=AW8Wj7cqbY0DFAXN&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

728x90