알고리즘

백준 25634번 전구 상태 뒤집기 (JAVA)

박카스마시며코딩 2023. 6. 18. 18:34

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

 

25634번: 전구 상태 뒤집기

$N$개의 전구가 일렬로 세워져 있다. 전구는 켜져 있을 수도 있고 꺼져 있을 수도 있다. 만약 $i$번째 전구가 켜져 있다면 그 전구의 밝기는 $a_i$이다. 연우는 $N$개의 전구 중 연속한 전구를 한 개

www.acmicpc.net

 

저는 구현을 통해 문제를 해결했습니다.

앞에서부터 뒤집었을 때 합을 구하였습니다. 이때 음수라면 0으로 다시 초기화를 하고 아니라면 이 값들의 최대를 구하였습니다.

마지막으로 최대값이 0이라는 것은 모두 켜져있다고 판단하여 가장 작은 전구 값을 빼서 답을 구하고, 아니라면 켜져있는 전구의 합에서 max를 더해주어 답을 구하였습니다. 

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_25634 {
    private static final int INF = 200_000 + 1;
    private static final int ON = 1;
    private static final int OFF = 0;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        int[] input = new int[n];
        int[] onOff = new int[n];
        int min = INF;

        for(int i = 0 ; i < n ; i++){
            input[i] = stoi.apply(st.nextToken());
            min = Math.min(min,input[i]);
        }
        st = new StringTokenizer(br.readLine());
        int result = 0;
        for(int i = 0 ; i < n ; i++){
            onOff[i] = stoi.apply(st.nextToken());
            if(onOff[i] == ON){
                result += input[i];
            }
        }
        int sum = 0;
        int max = 0;
        for(int i = 0 ; i < n ; i++){
            if(onOff[i] == OFF){
                sum += input[i];
            }
            if(onOff[i] == ON){
                sum -= input[i];
            }
            if(sum < 0){
                sum = 0;
            }
            max = Math.max(sum,max);
        }
        if(max == 0){
            System.out.println(result - min);
        }else{
            System.out.println(result + max);
        }
    }
}

'알고리즘' 카테고리의 다른 글

백준 21937번 작업 (JAVA)  (0) 2023.06.20
백준 11403번 경로 찾기 (JAVA)  (0) 2023.06.19
백준 28107번 회전초밥 (JAVA)  (0) 2023.06.17
백준 16469번 소년 점프 (JAVA)  (0) 2023.06.16
백준 13424번 비밀 모임 (JAVA)  (0) 2023.06.15