[백준 - 11497] 실버2 통나무 건너뛰기
알고리즘/백준

[백준 - 11497] 실버2 통나무 건너뛰기

www.acmicpc.net/problem/11497

 

11497번: 통나무 건너뛰기

남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이

www.acmicpc.net

1. 유형

그리디

 

2. 풀이

입력값을 정렬한 후에 아래 그림처럼 나올 수 있도록 +2만큼 건너 뛰면서 탐색한다.

3. 코드

import java.util.Arrays;
import java.util.Scanner;

public class back_11497통나무건너뛰기 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		for (int tc = 1; tc <= T; tc++) {
			int n = sc.nextInt();
			int inp[] = new int[n];
			for (int i = 0; i < n; i++) {
				inp[i] = sc.nextInt();
			}
			Arrays.sort(inp);
			int res = 0;
			int tmp = 0;
			if (inp.length % 2 == 1) {
				for (int i = 0; i + 2 < n; i += 2) {
					tmp = Math.abs(inp[i] - inp[i + 2]);
					res = tmp > res ? tmp : res;
				}
				for (int i = inp.length - 2; i - 2 >= 1; i -= 2) {
					tmp = Math.abs(inp[i] - inp[i - 2]);
					res = tmp > res ? tmp : res;
				}
			} else {
				for (int i = 0; i + 2 < n - 1; i += 2) {
					tmp = Math.abs(inp[i] - inp[i + 2]);
					res = tmp > res ? tmp : res;
				}
				for (int i = inp.length - 1; i - 2 >= 1; i -= 2) {
					tmp = Math.abs(inp[i] - inp[i - 2]);
					res = tmp > res ? tmp : res;
				}
			}
			//정점
			tmp = Math.abs(inp[inp.length - 1] - inp[inp.length - 2]);
			res = tmp > res ? tmp : res;
			//끝점과 끝점
			tmp = Math.abs(inp[0] - inp[1]);
			res = tmp > res ? tmp : res;
			System.out.println(res);
		}
	}
}