[Algorithm] ๐ŸŒด๋ฐฑ์ค€ 11497 ํ†ต๋‚˜๋ฌด ๊ฑด๋„ˆ๋›ฐ๊ธฐ

HaJingJingยท2021๋…„ 5์›” 16์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
41/119

0. ๋ฌธ์ œ

๋‚จ๊ทœ๋Š” ํ†ต๋‚˜๋ฌด๋ฅผ ์„ธ์›Œ ๋†“๊ณ  ๊ฑด๋„ˆ๋›ฐ๊ธฐ๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ N๊ฐœ์˜ ํ†ต๋‚˜๋ฌด๋ฅผ ์›ํ˜•์œผ๋กœ ์„ธ์›Œ ๋†“๊ณ  ๋›ฐ์–ด๋†€๋ ค๊ณ  ํ•œ๋‹ค. ๋‚จ๊ทœ๋Š” ์›ํ˜•์œผ๋กœ ์ธ์ ‘ํ•œ ์˜† ํ†ต๋‚˜๋ฌด๋กœ ๊ฑด๋„ˆ๋›ฐ๋Š”๋ฐ, ์ด๋•Œ ๊ฐ ์ธ์ ‘ํ•œ ํ†ต๋‚˜๋ฌด์˜ ๋†’์ด ์ฐจ๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๊ฒŒ ํ•˜๋ ค ํ•œ๋‹ค.

ํ†ต๋‚˜๋ฌด ๊ฑด๋„ˆ๋›ฐ๊ธฐ์˜ ๋‚œ์ด๋„๋Š” ์ธ์ ‘ํ•œ ๋‘ ํ†ต๋‚˜๋ฌด ๊ฐ„์˜ ๋†’์ด์˜ ์ฐจ์˜ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. ๋†’์ด๊ฐ€ {2, 4, 5, 7, 9}์ธ ํ†ต๋‚˜๋ฌด๋“ค์„ ์„ธ์šฐ๋ ค ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ด๋ฅผ [2, 9, 7, 4, 5]์˜ ์ˆœ์„œ๋กœ ์„ธ์› ๋‹ค๋ฉด, ๊ฐ€์žฅ ์ฒซ ํ†ต๋‚˜๋ฌด์™€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ํ†ต๋‚˜๋ฌด ์—ญ์‹œ ์ธ์ ‘ํ•ด ์žˆ๋‹ค. ์ฆ‰, ๋†’์ด๊ฐ€ 2์ธ ๊ฒƒ๊ณผ ๋†’์ด๊ฐ€ 5์ธ ๊ฒƒ๋„ ์„œ๋กœ ์ธ์ ‘ํ•ด ์žˆ๋‹ค. ๋ฐฐ์—ด [2, 9, 7, 4, 5]์˜ ๋‚œ์ด๋„๋Š” |2-9| = 7์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ๋” ๋‚˜์€ ๋ฐฐ์—ด [2, 5, 9, 7, 4]๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ๋ฐฐ์—ด์˜ ๋‚œ์ด๋„๋Š” |5-9| = 4์ด๋‹ค. ์ด ๋ฐฐ์—ด๋ณด๋‹ค ๋‚œ์ด๋„๊ฐ€ ๋‚ฎ์€ ๋ฐฐ์—ด์€ ๋งŒ๋“ค ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด ๋ฐฐ์—ด์ด ๋‚จ๊ทœ๊ฐ€ ์ฐพ๋Š” ๋‹ต์ด ๋œ๋‹ค.

์ž…๋ ฅ
์ž…๋ ฅ์€ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ฒซ ์ค„์— T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.
์ด์–ด์ง€๋Š” ๊ฐ ์ค„๋งˆ๋‹ค ์ฒซ ์ค„์— ํ†ต๋‚˜๋ฌด์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ N(5 โ‰ค N โ‰ค 10,000), ๋‘˜์งธ ์ค„์— ๊ฐ ํ†ต๋‚˜๋ฌด์˜ ๋†’์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ Li๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค Li โ‰ค 100,000)

์ถœ๋ ฅ
๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค ํ•œ ์ค„์— ์ฃผ์–ด์ง„ ํ†ต๋‚˜๋ฌด๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋‚œ์ด๋„๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

1. ์•„์ด๋””์–ด

๐Ÿ’ก ์ˆซ์ž์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•จ
๐Ÿ’ก ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ (1,n), (2,n-1), ... ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋„ฃ์–ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ฆ
๐Ÿ’ก ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์˜ ์ธ์ ‘ํ•œ ์ˆซ์ž ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ œ์ผ ํฐ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•จ

2. ํ•ต์‹ฌ ํ’€์ด

1) ์ˆซ์ž์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•จ

Arrays.sort(arr);

2) ์ž‘์€ ์ˆซ์ž๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ (1,n), (2,n-1), ... ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ๋„ฃ์–ด์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ฆ

for(int i=0, j=0; j<n/2; i=i+2, j++) {
				wood[j] = arr[i];
				wood[n-j-1] = arr[i+1];
			}
			
if(n % 2 == 1)
				wood[n/2] = arr[n-1];

3) ์ƒˆ๋กœ ๋งŒ๋“  ๋ฐฐ์—ด์˜ ์ธ์ ‘ํ•œ ์ˆซ์ž ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ œ์ผ ํฐ ์ˆซ์ž๋ฅผ ์ถœ๋ ฅํ•จ

int max = Math.abs(wood[0]-wood[n-1]);
for(int i=1; i<n; i++) 
			max = Math.max(max,Math.abs(wood[i]-wood[i-1]));

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Greedy_13 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int tc = Integer.parseInt(br.readLine());
		
		while(tc-- > 0) {
			int n = Integer.parseInt(br.readLine());
			int arr[] = new int[n];
			int wood[] = new int[n];
			
			String s[] = br.readLine().split(" ");
			
			for(int i=0; i<n; i++)
				arr[i] = Integer.parseInt(s[i]);
			
			Arrays.sort(arr);
			
			for(int i=0, j=0; j<n/2; i=i+2, j++) {
				wood[j] = arr[i];
				wood[n-j-1] = arr[i+1];
			}
			
			if(n % 2 == 1)
				wood[n/2] = arr[n-1];
			
			int max = Math.abs(wood[0]-wood[n-1]);
			for(int i=1; i<n; i++) 
				max = Math.max(max,Math.abs(wood[i]-wood[i-1]));
			
			System.out.println(max);
		}
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณตโœจ
(๊ฐ€์žฅ ๋ ๊ฐ’๊ณผ ์ฒ˜์Œ ๊ฐ’์ด ์ธ์ ‘ํ•˜๋Š” ๊ฒƒ์„ ๋ฐ˜๋“œ์‹œ ๊ณ ๋ คํ•ด์ค˜์•ผ ํ•œ๋‹ค!)

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€