[백준] 28076. 멀티탭 충분하다 (Java)

서재·2026년 2월 12일

백준 알고리즘 풀이

목록 보기
49/49
post-thumbnail

👨‍💻 문제


✍️ 풀이

쌓을 때마다 60도 씩 돌아가는 콘센트 N개를 N층으로 쌓았을 때,
위에서 보이는 단자의 수의 최솟값을 찾는 문제이다.

🔻 최적으로 쌓는 방법

모든 콘센트는 최소 2구이다.
위와 같이 콘센트의 2구들끼리 삼각형의 형태를 이루도록 쌓아가면 보이는 단자의 수를 최소로 만들 수 있다.

예시 1)

6
3 3 3 3 3 3

빨강 : 3 3 
주황 : 3 3
청록 : 3 3

result : 6

📊 콘센트 분배

각 각도 당 가장 긴 콘센트들의 길이의 합이 최소가 되도록 분배하면 된다.

예시 2)

10
2 2 3 4 5 5 6 7 8 9

빨강 : 2 2 3
주황 : 4 5 5
청록 : 6 7 8 9

result : 14

길이 순으로 정렬한 뒤 3등분하여 각 부분의 최대값을 추출한다.

		int sIdx = N/3 - 1;
		int mIdx = N/3*2 + N%3/2 - 1;
		int lIdx = N/3*3 + N%3 - 1;
		int s = arr.get(sIdx);
		int m = arr.get(mIdx);
		int l = arr.get(lIdx);

이후 겹치는 부분인 3을 빼고 출력한다.

System.out.println(s + m + l - 3);

⚠️ 예외처리

위 로직은 콘센트가 3개 이상일 때 유효하다.

        if (arr.size() == 1) {
            System.out.println(arr.get(0));
            return;
        }
        if (arr.size() == 2) {
            System.out.println(arr.get(0) + arr.get(1) - 1);
            return;
        }

📄 전체 소스코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class _28076 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        List<Integer> arr = Arrays.stream(br.readLine().split(" "))
                .map(Integer::parseInt)
                .sorted()
                .collect(Collectors.toList());

        if (arr.size() == 1) {
            System.out.println(arr.get(0));
            return;
        }
        if (arr.size() == 2) {
            System.out.println(arr.get(0) + arr.get(1) - 1);
            return;
        }

        int sIdx = N/3 - 1;
        int mIdx = N/3*2 + N%3/2 - 1;
        int lIdx = N/3*3 + N%3 - 1;
        int s = arr.get(sIdx);
        int m = arr.get(mIdx);
        int l = arr.get(lIdx);

        System.out.println(s + m + l - 3);
    }

}
profile
입니다.

0개의 댓글