문제 풀이/백준

[백준] 15779번. Zigzag(JAVA)

27200 2025. 7. 1. 20:06

문제

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


풀이(12분)

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];

        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < n; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        int max = 2;
        int startIdx = -1;
        for(int i = 0; i < n-2; i++){
            if(!(arr[i] <= arr[i+1]) || !(arr[i+1] <= arr[i+2])){ // Ai ≤ Ai+1 ≤ Ai+2
                if(!(arr[i] >= arr[i+1]) || !(arr[i+1] >= arr[i+2])){ // Ai ≥ Ai+1 ≥ Ai+2
                    if(startIdx == -1){
                        startIdx = i;
                    }
                    max = Math.max(max, i - startIdx + 3); // +2 인덱스까지 고려한 길이
                    continue;
                }
            }
            startIdx = -1;
        }

        System.out.println(max);
    }
}

문제 풀이 전략

 

문제에서 비교하라는 조건을 직접 비교한 뒤 생각해도 시간복잡도 상에서 해결되는 문제였다.

체크할만한 부분은 startIdx = -1로 설정해 주는 것이다.

-> 이를 통해 다시 시작해야되는 지를 고려하고, 이용하여 길이를 계산할 수 있다.

 

생각보다 원하는 값이 나오지 않아 고생한 문제이다.

 

최대 길이를 고려할 때 +2가 된 값을 생각하지 않아 발생한 문제였다.