문제 번호 : 24998 번
문제 바로가기 ☞ https://www.acmicpc.net/problem/24498
<<< 문제 내용 >>>
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim().split("\n");
const N = input[0];
const block = input[1].split(" ").map(Number);
const answer = [block[0], block[block.length - 1]];
for (let i = 1; i < block.length - 1; i++) {
answer.push(Math.min(block[i - 1], block[i + 1]) + block[i]);
}
console.log(Math.max(...answer));
* 요즘 프로젝트 기획이 끝난 후 구현 단계에 들어서 굉장히 바빠졌다.
어려운 문제를 풀기엔 조금 벅차고, 감을 잃지 않게 끔 적절히 문제를 풀 예정이다.
이번 문제는 제 1회 블롭컵이라는 백준 대회의 1번 문제이다.
머릿 속에서 시뮬레이션을 잠깐 돌려보면
첫 번째와 마지막을 제외한 중간만 양 옆을 -1하면서 자기(a라 칭함)는 +1 할 수 있다. ( 0 까지만 )
더 많이 쌓아보려고 한다면, 양 옆이 0이 되는 곳을 더 높여줘야 하는데, 이러면 지금 최대한 높게 쌓고자 했던
a가 줄어든다.
결국은, 그냥 자기 위치에서 양 옆 중 최소 값을 찾아서 걔 만큼만 더 올릴 수 있다. 는 결론이 나온다.
-> 한 번만에 통과하지 못했던 이유는 첫 번째 탑과 마지막 탑이 제일 높은 경우를 고려하지 않았었다.
도움이 되셨다면 공감 부탁드립니다.