본문 바로가기

코딩테스트

[백준 13164번][JAVA] 행복 유치원

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개 만큼 빼는 방식으로 코드를 짰습니다.
  • 항상 느끼지만 생각한대로 코드짜다가 굳이 필요없는 부분까지 짜게되는 경우가 있어서 문제에서 무엇을 요구하고 어떻게 하면 효율적으로 코드를 짤 수 있을 지 고민하는 것이 필요합니다.

 

 

감사합니다 !