白駿Baekjoon 2846号上り坂-JAVA


https://www.acmicpc.net/problem/2846
質問する
尚根は自転車で学校に通っている.自転車道は上り坂、下り坂、平地からなる.尚根さんは学校が始まる初日に自転車に乗った時、一定距離おきに高さを測った.尚根は最大の上り坂の大きさを求めたい.
測定した高さは長さNの数列で表すことができる.ここで、上り坂は少なくとも2つの河川からなる高さが増加した部分数列である.上り坂の大きさは、部分数列の最初の数字と最後の数字の違いです.
たとえば、道路の高さを次のように仮定します.12 3 5 7 10 6 1 11. この道には上り坂が2本ある.下線で表示される部分の数列は上り坂です.1本目の上り坂の大きさは7、2本目の上り坂の大きさは10です.高さ12と6のところは上り坂ではありません.
最大の上り坂を求めるプログラムを作成してください.
入力
第1行は、前根で測定した高さ数と数列の大きさN(1≦N≦1000)を与える.2行目には、N個の正の整数Pi(1≦Pi≦1000)が与えられる.各数字は上根で測定した高さです.
しゅつりょく
最初の行は最大上り坂のサイズを出力します.上り坂がなければ0を出力します.
入力例1
5
1 2 1 4 6
サンプル出力1
5
入力例2
8
12 20 1 3 4 4 11 1
サンプル出力2
8
例えば、上り坂は全部で3本あります.(12−20,1−3−4,4−11)上り坂に含まれる数字は常に増加しなければならない.従って、1−3−4−1は上り坂ではない.
入力例3
6
10 8 8 6 4 3
サンプル出力3
0
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int N = Integer.parseInt(br.readLine());
		String str[] = br.readLine().split(" ");

		int[] arr = new int[str.length];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = Integer.parseInt(str[i]);
		}

		int longInterval = 0; // 간격
		int interval = 0;
		for (int i = 0; i < N - 1; i++) { // 뒷값이랑 비교하기 때문에 N - 1
			if (arr[i] < arr[i + 1]) { // 뒷 길이가 길때
				interval += arr[i + 1] - arr[i];
			} else {
				interval = 0;
			}
			if (longInterval < interval)
				longInterval = interval;
		}
		System.out.println(longInterval);
	}
}
  • 説明
  • は、単純なlong interval、interval概念によって最高値を更新した.