250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 막내의막무가내 SQL
- 막내의막무가내 알고리즘
- 막내의막무가내 코틀린
- 막내의막무가내 코틀린 안드로이드
- 막내의막무가내 플러터
- 주택가 잠실새내
- 막내의막무가내
- Fragment
- 부스트코스에이스
- 막내의막무가내 목표 및 회고
- 부스트코스
- 막내의막무가내 플러터 flutter
- 막내의막무가내 프로그래밍
- 2022년 6월 일상
- 막내의막무가내 일상
- 막내의막무가내 코볼 COBOL
- 막내의막무가내 rxjava
- 막내의 막무가내
- 막내의막무가내 안드로이드
- 안드로이드
- 안드로이드 sunflower
- 주엽역 생활맥주
- flutter network call
- 프로그래머스 알고리즘
- 막내의막무가내 안드로이드 에러 해결
- 막내의 막무가내 알고리즘
- 프래그먼트
- 막내의막무가내 안드로이드 코틀린
- 막무가내
- 안드로이드 Sunflower 스터디
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 백준 11497 통나무 건너뛰기 -그리디- 자바, 코틀린 본문
728x90
https://www.acmicpc.net/problem/11497
백준 11497 통나무 건너뛰기 문제를 풀어봤습니다.
그리디 유형의 문제였습니다.
최소의 난이도를 가진 둥근 모양의 통나무 배치를 하기 위해서는
통나무를 양 옆으로 작은것들로 시작하여 점점 가운데로 올 수록 크게 배치하면 최소의 난이도를 만들 수 있습니다.
풀이는 다음과 같습니다.
[Java]
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt(); // 테스트 케이스 수
for (int t = 0; t < T; t++) {
int N = sc.nextInt(); // 통나무 개수
int[] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr); // 정렬
int left = N - 1;
int right = 0;
int[] nums = new int[N];
// 왼쪽 오른쪽에 하나씩 정렬된 통나무를 놓으면 가장 작은 차이를 만들 수 있음
for (int i = 0; i < N; i++) {
if (i % 2 == 0) {
nums[left--] = arr[i];
} else {
nums[right++] = arr[i];
}
}
// 인접한것들끼리의 크기비교
int answer = Integer.MIN_VALUE;
for (int i = 1; i < N; i++) {
answer = Math.max(answer, Math.abs(nums[i] - nums[i - 1]));
}
// 처음과 끝 통나무도 크기비교
answer = Math.max(answer,Math.abs(nums[0] - nums[N - 1]));
System.out.println(answer + " ");
}
}
}
[kotlin]
import java.util.*
import kotlin.math.abs
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val T = sc.nextInt() // 테스트 케이스 수
for (t in 0 until T) {
val N = sc.nextInt() // 통나무 개수
val arr = IntArray(N)
for (i in 0 until N) {
arr[i] = sc.nextInt()
}
Arrays.sort(arr) // 정렬
var left = N - 1
var right = 0
val nums = IntArray(N)
// 왼쪽 오른쪽에 하나씩 정렬된 통나무를 놓으면 가장 작은 차이를 만들 수 있음
for (i in 0 until N) {
if (i % 2 == 0) {
nums[left--] = arr[i]
} else {
nums[right++] = arr[i]
}
}
// 인접한것들끼리의 크기비교
var answer = Int.MIN_VALUE
for (i in 1 until N) {
answer = answer.coerceAtLeast(abs(nums[i] - nums[i - 1]))
}
// 처음과 끝 통나무도 크기비교
answer = answer.coerceAtLeast(abs(nums[0] - nums[N - 1]))
println("$answer ")
}
}
댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!!
https://github.com/mtjin/algorithm_practice/commit/79d3ccc066903ee71af5d537954d05cad6680999
728x90
'알고리즘 > 그리디' 카테고리의 다른 글
[알고리즘] 백준 9237 이장님 초대 -그리디- 자바, 코틀린 (0) | 2022.03.11 |
---|---|
[알고리즘] 백준 14659 한조서열정리하고옴ㅋㅋ -그리디- 자바, 코틀린 (2) | 2021.12.05 |
[알고리즘] 백준 1026 보물 -그리디- 자바, 코틀린 (0) | 2021.11.23 |
[알고리즘] 백준 10162 전자레인지 -그리디- 자바 (2) | 2021.05.11 |
[알고리즘] 백준 13305 주유소 -그리디- 자바 코틀린 (2) | 2021.04.09 |
Comments