Java/코딩테스트

[백준] 25916번 - 싫은데요

soowitty 2024. 2. 16. 23:54

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