백준 2616 - 오르막길

Updated:

Java

2616 번 - 오르막길

문제

  • 길의 높이가 N개만큼 주어진다.
  • 부분 수열의 높이가 증가하면 오르막길, 감소하면 내리막길이다.
  • 가장 큰 오르막길을 구하자

접근 방법

N개의 높이를 각각 탐색하여 높이가 처음으로 증가하는 경우 그 처음 높이를 초기값을 저장해둔다.
이후에도 계속하여 이전보다 높은 수가 나오면 현재 높이와 처음 높이의 차를 구해주어 최대 길이의 오르막길을 구한다.

만약 현재 수가 이전 수보다 작으면, 올라가고 있다는 flag(isUP)을 false 해주어, 다시 오르막길을 탐색하도록 한다.

코드

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

public class Main {
	static int n, result;
	static int[] road;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	StringTokenizer stk;
    	n = stoi(br.readLine());
    	
    	road = new int[n];
    	stk = new StringTokenizer(br.readLine());
    	
    	for(int i = 0; i < n; i++) {
    		road[i] = stoi(stk.nextToken());
    	}
    	
    	int start = 0, max = 0;
    	boolean isUP = false;	
    	for(int i = 1; i < n; i++) {
			// 오르막길 일때,
    		if(road[i - 1] < road[i]) {
    			if(!isUP) {	// 오르막길의 처음 일때
    				isUP = true;
    				start = road[i - 1];
    			}
				max = Math.max(max, road[i] - start);	// 현재까지의 오르막길 높이의 최대 값 갱신
    		}
    		else	// 내리막길, 평지 일때
    			isUP = false;	// 오르막길을 초기화 한다.
    	}
    	
    	System.out.println(max);
    	br.close();
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

개선할 점

없습니다.