Baekjoon/Silver

C++ / 백준 / 24498 / blobnom

GitHubSeob 2023. 12. 12. 15:32
문제

 

https://www.acmicpc.net/problem/24498

 

24498번: blobnom

블롭들은 심심해서 서로를 이용해 $N$개의 탑을 만들었다. 각 탑의 높이는 그 탑에 있는 블롭의 수와 같다. 여러분은 다음 행동을 $0$회 이상 할 수 있다. 처음과 마지막이 아닌 탑 중 하나를 선

www.acmicpc.net

 

 

문제풀이

 

맨 처음과 맨 끝을 제외한 탑에 있는 블롭의 수 + 인접한 두 타워 중 블롭의 최솟값을 더한 값 중 최댓값을 구하는 문제이다.

조심할 점은 인접한 블롭수를 더하지 않는 맨 처음 또는 맨 끝에 있는 탑의 블롭수가 정답일 수도 있다는 점이다.

 

먼저 answer에 맨 처음 타워인 tower[0], 맨 끝 타워인 tower.back() 중 최댓값을 저장해 놓는다.

 

그다음 1부터 N-2까지 탐색하면서 해당 타워의 인접한 두 타워 블롭 수의 최솟값 + 해당 타워의 블롭수 중 최댓값을 answer에 저장하면 된다.

 

코드
#include <bits/stdc++.h>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);

	int N(0);
	cin >> N;
	vector<int>tower(N, 0);
	for (int idx = 0; idx < N; ++idx) cin >> tower[idx];

	int answer(max(tower[0],tower.back()));	

	for (int idx = 1; idx + 1 < N; ++idx) {
		answer = max(answer, tower[idx] + min(tower[idx - 1], tower[idx + 1]));
	}
	cout << answer;
}