문제는 다음과 같다.

예제입력은 다음과 같다.
예제입력
4 4
3 0 1 4출력
5
문제를 처음 본 순간 생각했다.
이야.. 쉽다.. 쉬워..
알고리즘 문제가 아니라면..
스스로에게 근자감이라도 불어넣어주고자 허세 한번 부려주고 시작해보자.
필자는 처음 이 문제를 다음과 같은 단계로 해결해보자고 생각했다.
끝..!
은 아니다.
구현이 되어야 끝이 나지..
어떻게 구현을 할 수 있을지 곰곰히 생각했다가..
때려쳤다.
내게 주어진 시간은 이미 지났고 내가 풀 수 없는 문제라는 것을 인정하는 시간이었기 때문이다.
이런 문제조차 풀 수 없는 나.. 얼마나 성장하려고 그러지..?
라는 생각으로 다른 사람의 풀이를 보아서 나의 생각 범위를 넓혀주자.
다른 사람의 접근법은 다음과 같다.
코드는 다음과 같다.
public class Main {
static int n, m;
static int[] rain;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
m = Integer.parseInt(st.nextToken());
n = Integer.parseInt(st.nextToken());
rain = new int[n];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++)
rain[i] = Integer.parseInt(st.nextToken());
int answer = 0;
for(int i = 1; i < n - 1; i++){
int l = 0, r = 0;
for(int j = 0; j < i; j++)
l = Math.max(l, rain[j]);
for(int j = i + 1; j < n; j++)
r = Math.max(r, rain[j]);
if(rain[i] < l && rain[i] < r) answer += Math.min(l, r) - rain[i];
}
System.out.println(answer);
}
}

복잡하게 생각하면 한없이 복잡해지고 단순하게 생각하면 한없이 단순해진다.
우리는 여러 문제를 많이 풀어보아서 문제에 난이도에 맞는 생각을 할 수 있도록 하자.
필자는 범위를 기준으로 결과를 구하려고 했지만, 해당 문제는 요소 하나를 기준으로 결과를 누적하여 구하는 문제였다.
이번 문제를 계기로 일단 가장 작은 단위부터 접근해봐야 한다는 생각을 할 수 있었다.
문제의 첫 인상은 무서웠고 끝 인상은 귀여웠다.
기억해두겠어. 14719번.
끝!