반응형
백준 22945번 문제 - 팀 빌딩
22945번: 팀 빌딩
개발자 $N$명이 팀 빌딩을 위해 한 줄로 서있다. 하나의 팀을 만들기 위해서는 개발자 2명이 반드시 모여야 한다. 개발자 A와 개발자 B가 팀을 만들 때 팀의 능력치는 아래와 같이 계산이 된다. (개
www.acmicpc.net
문제 분석
- 개발자 2명 이상의 팀이 만들어져야하며,
이 때 해당 팀의 능력치는 [양끝에 있는 개발자 중에 낮은 능력치 * 개발자 수 -2] 이다. - 그럼 n명의 개발자가 순서 있이 주어졌을 때 가장 큰 팀 능력치를 구해라
해결 키 포인트
- 투포인트로 문제 풀이
- 개발 능력치는 양끝 사람의 능력치가 중요하므로 포인터를 양끝에 둔다.
- 포인터가 만났거나 추월했을 때 반복 종료되는 반복문
- 최대값과 비교해 현재 팀이 최대값이면 최대값 변경 아니면 이전 최대값 유지
최대값 구하는 식 : max = Math.max(max, Math.min(startNum, endNum) * (end - start - 1)); - 양 끝 값 중에 작은 값을 이동
(작은 값은 최대값을 만드는데 도움이 안됨)
투포인터 문제에 중점
- 투포인터를 양끝에 둘지, 맨 앞에 같이 둘지 정하는게 중요 !
나도 아직 잘 모르지만 간단하게 생각하면 다음과 같은 것 같다.
- 맨 앞 : 연속된 구간에 관한 문제
- 양 끝 : 맨 끝에 값이 중요할 때
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int [] nums = new int[N+1];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=1;i<N+1;i++) {
nums[i] = Integer.parseInt(st.nextToken());
}
int start = 1;
int end = N;
int max = 0;
while(start < end) {
int startNum = nums[start];
int endNum = nums[end];
max = Math.max(max, Math.min(startNum, endNum) * (end - start - 1));
if(startNum > endNum) {
end--;
}
else {
start++;
}
}
System.out.println(max);
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[SW Expert D2] 1989. 초심자의 회문 검사 (1) | 2023.11.15 |
---|---|
[SW Expert D2] 2001. 파리 퇴치 (1) | 2023.11.15 |
[SW Expert D2] 2005. 파스칼의 삼각형 (1) | 2023.11.13 |
[SW Expert D2] 2007. 패턴 마디의 길이 (0) | 2023.11.13 |
[SW Expert D2] 1926. 간단한 369게임 (0) | 2023.11.13 |