백준 13164번

2025. 1. 22. 10:09·코딩 테스트

문제

https://www.acmicpc.net/problem/13164

알고리즘

1. 그리디 알고리즘

2. 정렬

풀이

티셔츠 제작 비용은 "각 조의 최대 키와 최소 키의 차이"이므로 이 차이를 최소화하는 것이 목표이다.

  1. 조를 나누는 위치 중요
    • 조를 나누는 위치마다 새로운 그룹이 시작되고 그룹 간의 비용 합계에 영향을 준다.
  2. 두 키의 차이 핵심
    • 인접한 두 원생의 키 차이를 구하고 큰 차이가 발생하는 곳에서 조를 나누면 전체 비용을 줄일 수 있다.

1. 차이 배열 생성

원생들의 키 배열에서 인접한 원생들 간의 키 차이를 계산한다.
예를 들어 키 배열이 [1, 3, 5, 6, 10]이라면 차이 배열은 [2, 2, 1, 4]가 된다.

 

2. 조 나누기 (K개의 그룹 만들기)

K개의 조로 나누기 위해서는 K-1번의 구분점을 선택해야 한다.
구분점으로는 "차이 배열에서 가장 큰 값"을 선택한다. 큰 값에서 나누면 전체 비용 합계를 최소화할 수 있다.

예를 들어:

  • 차이 배열 [2, 2, 1, 4]에서 가장 큰 차이 4를 기준으로 나누면, 비용을 줄일 수 있다.

3. 비용 계산

차이 배열을 내림차순으로 정렬한 후 가장 큰 값들을 제외하고 나머지 값들의 합을 계산하면 전체 최소 비용을 구할 수 있다

코드

public class Main {
	public static void main(String[] args) {
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
			int N = Integer.parseInt(stringTokenizer.nextToken());
			int K = Integer.parseInt(stringTokenizer.nextToken());
			StringTokenizer people = new StringTokenizer(br.readLine());
			List<Integer> peopleSubList = new ArrayList<>();
			int pre = Integer.parseInt(people.nextToken());
			for (int i = 0; i < N - 1; i++) {
				int cur = Integer.parseInt(people.nextToken());
				peopleSubList.add(cur - pre);
				pre = cur;
			}
			int sum = peopleSubList.stream()
				.sorted(Comparator.comparing(integer -> -integer))
				.skip(K - 1)
				.mapToInt(value -> value)
				.sum();

			System.out.println(sum);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

'코딩 테스트' 카테고리의 다른 글

백준 2468번  (0) 2025.01.30
백준 1697번  (0) 2025.01.23
백준 2812번  (1) 2025.01.21
백준 11000번  (1) 2025.01.17
백준 1753번  (0) 2025.01.16
'코딩 테스트' 카테고리의 다른 글
  • 백준 2468번
  • 백준 1697번
  • 백준 2812번
  • 백준 11000번
jamin
jamin
  • jamin
    jamin
    jamin
  • 전체
    오늘
    어제
    • 전체 (82)
      • 트러블슈팅 (31)
        • 회사 (25)
        • 개인 (6)
      • 개념 저장소 (19)
        • coroutine (10)
        • spring reactive (9)
        • network (0)
      • 코딩 테스트 (31)
  • 태그

    다익스트라
    spring boot
    그리디 알고리즘
    수학
    DP
    코테
    백준
    spring reactive
    대용량 데이터
    coroutine
    코딩테스트
    error alram
    누적합
    dfs
    그리디
    BFS
    batch
    Kotlin
    sinks
    백준 23758
    JPA
    경로압축
    mirroring mode
    cluster mode
    reactive
    정렬
    분리집합
    다이나믹 프로그래밍
    log
    instancio
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jamin
백준 13164번
상단으로

티스토리툴바