https://www.acmicpc.net/problem/25916
25916번: 싫은데요
$6$번째 구멍부터 $8$번째 구멍까지 막으면 총 $9$의 부피를 소모하고, 최대값인 $9$를 출력한다
www.acmicpc.net
예제는 통과하는데 계속 틀렸다고 해서 며칠 동안 계속 삽질했다.. ㅠ.ㅠ
구글링 해도 원하는 알고리즘대로 푼 글이 없어서 답답했는데 같은 투포인터 유형의 다른 문제를 풀다가 해답을 찾았다!
아래 글대로 풀었더니 풀렸다.. 감사합니다😭
https://maivve.tistory.com/223
(JAVA) 백준 2003번 : 수들의 합2 --- [투포인터]
https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않
maivve.tistory.com
정확히 어떤 케이스에서 틀린 건지는 아직 깨닫지 못했지만, 중복으로 처리되는 부분이 있었던 것으로 보인다.
Solution
import java.io.*;
import java.util.*;
public class B25916_싫은데요 {
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[] hole = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0; i<N; i++){
hole[i] = Integer.parseInt(st.nextToken());
}
int start=0, end=0, sum=0, count=0;
int max = 0;
while(start != N){
if(sum >= M){
sum -= hole[start++];
}
else if(end == N){
break;
}
else{
sum += hole[end++];
}
if(sum <= M && sum > max){
max = sum;
}
}
System.out.println(max);
}
}
투포인터 정복하러 갑니다 👽
'Java > 코딩테스트' 카테고리의 다른 글
[JAVA] 순열과 조합 구현하기 (1) | 2024.03.29 |
---|---|
[백준] 11659번 구간 합 구하기 4 (0) | 2024.01.29 |