🌞Algorithm/🔥Baekjoon

[Baekjoon] 11497_통나무 건너뛰기

뿌야._. 2023. 9. 20. 11:34

Silver I

문제(출처: https://www.acmicpc.net/problem/11497)

< 통나무 건너뛰기 >

 

문제 풀이 

 

최소 난이도를 만들기 위해서는 통나무를 정렬 후 작은 통나무부터 배열로 치면 양 끝부터 채워 넣으면 된다.

 

 

 my solution (Java)

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 _11497_ { // 통나무 건너뛰기

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringTokenizer st;

		int t = Integer.parseInt(bf.readLine());
		for (int i = 0; i < t; i++) {
			int n = Integer.parseInt(bf.readLine());
			st = new StringTokenizer(bf.readLine());

			int arr[] = new int[n];
			for (int j = 0; j < n; j++) {
				arr[j] = Integer.parseInt(st.nextToken());
			}
			Arrays.sort(arr);

			int result[] = new int[n];
			int start = 0, end = n - 1, idx = 0;
			for (int j = 0; j < n; j++) {
				if (idx % 2 == 0) {
					result[start++] = arr[idx++];
				} else {
					result[end--] = arr[idx++];
				}
			}

			int answer = Math.abs(result[n - 1] - result[0]);
			for (int j = 0; j < n - 1; j++) {
				if (answer < Math.abs(result[j] - result[j + 1]))
					answer = Math.abs(result[j] - result[j + 1]);
			}
			bw.write(answer + "\n");
		}
		bw.flush();
	}
}

 

Main

변수)
t : 테스트 케이스
n : 통나무의 개수
arr : 통나무 높이 저장 배열
result : 통나무 세우는 방법 저장 배열
start, end : 통나무 세울 위치
idx : 현재 통나무 
answer : 최소 난이도

 

- 테스트 케이스(t) 입력

- 테스트 케이스 수(t)만큼 반복

: 통나무의 개수(n) 입력

: 통나무 개수(n)만큼 통나무 높이 입력받아 저장(arr)

: arr 정렬

: 정렬한 배열 arr을 새로운 배열에 맨 앞과 맨뒤부터 채워 넣음

: 최소 난이도 구한 후 출력



 

'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글

[Baekjoon] 11256_사탕  (0) 2023.09.22
[Baekjoon] 10819_차이를 최대로  (0) 2023.09.21
[Baekjoon] 1969_DNA  (0) 2023.09.19
[Baekjoon] 2828_사과 담기 게임  (1) 2023.09.18
[Baekjoon] 1213_팰린드롬 만들기  (0) 2023.09.15