728x90
https://www.acmicpc.net/problem/13164
13164번: 행복 유치원
행복 유치원 원장인 태양이는 어느 날 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다. 각 조에는 원생이 적어도 한 명 있어야 하며, 같은 조에 속한 원생들은 서로
www.acmicpc.net
문제를 간단히 요약해보자면
원생의 수 n을 입력받고, n명을 나눌 조의 개수 k개를 입력받습니다.
두번째 줄에는 원생을 키순서로 입력받습니다.
원생 n명을 k개의 조로 나눴을 때 각 조의 가장 큰 키와 작은 키의 차이를 더한 값이 최소가 되도록 나눠주고,
구한 최솟값을 출력해줍니다.
import java.util.Arrays;
import java.util.Scanner;
public class num13164 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // n명의 원생
int k = sc.nextInt(); // 나누려고 하는 조 k개
int gapsSum = 0;
int[] height = new int[n];
int[] gaps = new int[n-1];
for(int i = 0; i < n; i++) {
height[i] = sc.nextInt(); // 키를 원생 수만큼 받는다.
}
for(int g = 0; g < height.length-1; g++) {
gaps[g] = height[g+1] - height[g]; // 앞뒤 값의 차이를 gaps의 0번째부터 채워준다.
gapsSum += gaps[g];
}
Arrays.sort(gaps);
int cnt = 0;
for(int g = gaps.length-1; cnt != k-1; g--) {
gapsSum -= gaps[g];
cnt++;
}
System.out.println(gapsSum);
}
}
덧붙이자면...
- 원생을 쭉 늘였을 때 앞뒤 값의 차이가 가장 큰 경우를 k-1개 만큼 빼는 방식으로 코드를 짰습니다.
- 항상 느끼지만 생각한대로 코드짜다가 굳이 필요없는 부분까지 짜게되는 경우가 있어서 문제에서 무엇을 요구하고 어떻게 하면 효율적으로 코드를 짤 수 있을 지 고민하는 것이 필요합니다.
감사합니다 !
'코딩테스트' 카테고리의 다른 글
[ 프로그래머스, Lv2 ] [ JAVA ] 멀리뛰기 - DP (1) | 2024.02.01 |
---|---|
[프로그래머스, Lv2][JAVA] 카펫 (4) | 2023.07.23 |
[백준 10828번] [JAVA] 스택 (1) | 2023.07.17 |
[백준 1076번] [JAVA] 저항 (0) | 2023.07.09 |
[백준 2164번] [JAVA] 카드 2 (0) | 2023.07.07 |