문제(출처: 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 |