
내가 생각했을때 문제에서 원하는부분
첫째 줄에는 수열의 길이 N이 주어지고, 둘째 줄에는 N개의 숫자가 빈칸을 사이에 두고 주어진다.
N은 1 이상 100,000 이하의 정수이다.
첫째 줄에 가장 긴 길이를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 첫 번째 줄에서 수열의 길이 N을 읽고, 두 번째 줄에서 수열의 숫자들을 읽어 배열에 저장한다.
최장 수열 찾기:
첫 번째 반복문에서는 수열이 증가하는 경우의 길이를 계산한다.
두 번째 반복문에서는 수열이 감소하는 경우의 길이를 계산한다.
각 경우에서 최대 길이를 업데이트해준다.
결과 출력: StringBuilder를 사용하여 결과를 저장하고, 한 번에 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 2491번 문제
public class Main953 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
// 수열의 길이 N 입력
int N = Integer.parseInt(br.readLine());
String[] input = br.readLine().split(" ");
int[] sequence = new int[N];
// 수열 입력
for(int i = 0; i < N; i++) {
sequence[i] = Integer.parseInt(input[i]);
}
// 최대 길이 초기화
int maxLength = 1;
int currentLength = 1;
// 증가 또는 감소하는 수열의 길이 계산
for(int i = 1; i < N; i++) {
if(sequence[i] >= sequence[i - 1]) {
currentLength++;
} else {
maxLength = Math.max(maxLength, currentLength);
currentLength = 1;
}
}
maxLength = Math.max(maxLength, currentLength); // 마지막 증가 수열 확인
currentLength = 1; // 감소하는 경우를 위해 초기화
for(int i = 1; i < N; i++) {
if(sequence[i] <= sequence[i - 1]) {
currentLength++;
} else {
maxLength = Math.max(maxLength, currentLength);
currentLength = 1;
}
}
maxLength = Math.max(maxLength, currentLength); // 마지막 감소 수열 확인
// 결과 출력
sb.append(maxLength);
System.out.println(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.