문제 풀이/백준
[백준] 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가 된 값을 생각하지 않아 발생한 문제였다.