본문으로 바로가기

백준 22945번 팀빌딩 (JAVA)

category 알고리즘/백준 2021. 10. 2. 00:46

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

 

22945번: 팀 빌딩

능력치가 다 다른 개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같

www.acmicpc.net

 

생각보다 효율성을 맞추는 것이 굉장히 까다로웠던 문제.

 

O(N)으로 해결할 방법을 찾는 것이 핵심인 문제였다. (투포인터로 해결)

 

package BOJ.투포인터;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_22945_팀빌딩 {

    static Function<String, Integer> stoi = Integer::parseInt;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int ans = 0;
        int n = stoi.apply(br.readLine());
        int[] developers = new int[n];
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < n; i++) {
            developers[i] = stoi.apply(st.nextToken());
        }
        int left = 0;
        int right = n - 1;
        while (left != right) {
            ans = Math.max(ans, (right - left - 1) * Math.min(developers[left], developers[right]));
            if (developers[left] < developers[right]) {
                left++;
            } else {
                right--;
            }
        }

        System.out.println(ans);
    }

}