아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

롤러코스터

면접 대비

시간 제한1초메모리 제한128 MB

요약
기둥 높이 수열에서 일부를 지워 남은 수열이 엄격히 감소하다가 엄격히 증가하도록 만들 때, 남길 수 있는 기둥 수의 최댓값을 구한다.
난이도

보통10점 중 5점

유형
동적 계획법, 배열, 그리디, 투 포인터
정답자
아직 제출이 없습니다

문제

롤러코스터의 하이라이트는 내리막을 쭉 내려갔다가 다시 올라오는 순간이다. 롤러코스터 설계자 영창이는 이 하이라이트 구간을 되도록 길게 만들고 싶다.

새로 짓는 비용이 부담스러운 영창이는 철골 기둥만 남은 중고 롤러코스터를 사서 개조하기로 했다. 개조할 구간에는 기둥 NN개가 한 줄로 서 있고, 각 기둥의 높이가 수치로 주어진다. 기둥을 옮기는 비용이 비싸서 기둥은 제거만 하며, 남은 기둥은 원래 순서를 그대로 유지한다.

남은 기둥의 높이를 순서대로 늘어놓았을 때 높이가 먼저 계속 낮아지고 그다음 계속 높아지면 하이라이트 구간이 된다. 매끄러운 경사를 만들어야 하므로 이웃한 두 기둥의 높이는 같을 수 없다. 다시 올라오는 부분은 없어도 되고, 진행 방향은 공사가 끝난 뒤에 정하므로 계속 낮아지기만 하는 모양과 계속 높아지기만 하는 모양을 똑같이 인정한다. 하이라이트 구간을 전혀 만들 수 없으면 가장 높은 기둥 하나만 남긴다.

예를 들어 기둥의 높이가 4 3 5 1 4 2 3이면 높이 5인 세 번째 기둥과 높이 4인 다섯 번째 기둥을 제거해 4 3 1 2 3을 남기는 것이 최선이고, 기둥 5개가 남는다.

최대한 남길 수 있는 기둥의 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 개조할 구간의 기둥 개수 NN이 주어진다. NN은 1,000 이하의 자연수이다.

둘째 줄에 기둥 NN개의 높이가 서 있는 순서대로 주어진다. 각 높이는 10,000 이하의 자연수이다.

출력

최대한 남길 수 있는 기둥의 개수를 출력한다.

예제2

  1. 예제 1

    입력
    5
    5 2 3 2 1
    
    예상 출력
    4
  2. 예제 2

    입력
    7
    4 3 5 1 4 2 3
    
    예상 출력
    5