반응형
백준 싫은데요
https://www.acmicpc.net/problem/25916
접근 방식
전형적인 투 포인터 형태로 햄스터의 몸집을 구멍을 막았을 때 구멍의 크기m에 최대한 가까운 수를 찾아 출력하는 문제
구현 방법
- 탐색 했을 때 최대값을 찾을 max값
- 누적합을 계산해 줄 count
- 투 포인터에 활용할 left, right
⇒ while문 안에서 count의 값이 m보다 크면 left의 값을 count에서 뺀 후 left++, count의 값이 m보다 작거나 같으면 right의 값을 count에 더한 후 right++ 이 때 max의 값와 카운트의 값을 비교해 최댓값을 갱신
풀이
import java.io.*;
import java.util.*;
public class p25916 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int[] a = new int[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
//8 10
//2 2 2 2 11 2 5 2
//9
int left = 0;
int right = 0;
int max = Integer.MIN_VALUE;
int count = 0;
while (right < n) {
if (count +a[right] <= m) {
count += a[right];
max = Integer.max(max, count);
right++;
}else{
count -= a[left];
left++;
}
}
System.out.println(max);
}
}
후기
투 포인터에 익숙해지기 좋은 문제였다
반응형
'공부 > Algorithm' 카테고리의 다른 글
백준 16987 계란으로 계란치기 자바로 풀어 본 짧은 글 (0) | 2023.12.13 |
---|---|
백준 2866 문자열 잘라내기 자바로 풀어 본 짧은 글 (2) | 2023.12.08 |
백준 2805 나무 자르기 자바로 풀어 본 짧은 글 (2) | 2023.12.03 |
백준 16401 과자 나눠주기 자바로 풀어 본 짧은 글 (0) | 2023.12.02 |
백준 29812번 아니 이게 왜 안돼 자바로 풀어 본 짧은 글 (0) | 2023.12.01 |