[SWExpertAcademy] 9229. 한빈이와 Spot Mart(자바)

Jihun·2022년 2월 8일
0

SWExpertAcademy

목록 보기
8/10
post-thumbnail

[SWExpertAcademy] 9229. 한빈이와 Spot Mart

문제

풀이

과제 무게를 오름차순 정렬해서 투 포인터로 품.
1) 두 포인터가 가리키는 값의 합이 제한된 무게보다 큰 경우
뒤의 포인트를 내림
2) 뒤의 포인터를 내리고 작은 경우
앞의 포인터를 올림
현재 최대가 되는 두 무게의 합과 현재 포인터가 가리키는 합을 비교하여 더 큰 값으로 answer 갱신

answer을 갱신해가며 두 개의 포인터가 만날때 종료

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class D9299 {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;
		int T = Integer.parseInt(br.readLine());
		int N,M,start,end,cur,answer,arr[];
		for(int t = 1; t <= T; t++){
			st = new StringTokenizer(br.readLine());
			N=Integer.parseInt(st.nextToken());
			M=Integer.parseInt(st.nextToken());
			start=0;
			end=N-1;
			answer=-1;
			arr=new int[N];
			st = new StringTokenizer(br.readLine());
			for(int i=0;i<N;i++) {
				arr[i]=Integer.parseInt(st.nextToken());
			}
			Arrays.sort(arr);
			while(start!=end) {
				int add =arr[start]+arr[end];
				if(add>M) 
					end--;
				else {
					cur=arr[start]+arr[end];
					answer=answer>cur?answer:cur;
					start++;
				}
			}
			bw.write("#"+t+" "+answer+"\n");
			bw.flush();
		}
	}
}
profile
slow and steady

0개의 댓글