Algorithm/Algorithms Practice
[BOJ/C++] 게임을 만든 동준이(2847번)
Patrick_
2022. 11. 1. 11:56
1. 개요
https://www.acmicpc.net/problem/2847
2847번: 게임을 만든 동준이
학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어
www.acmicpc.net
1-1. 설명
학교 수업을 들은 동준이는 스마트폰 게임을 제작하였다. 총 N개의 레벨이 있으며 각 레벨을 클리어시 점수가 주어진다. 이때, 점수는 레벨에 따라 높아져야 하나, 동준이의 실수로 쉬운 레벨이 어려운 레벨보다 점수를 많이 받는 경우를 만들었다. 이를 해결하기 위해 특정 레벨 점수를 감소시키려 한다. 각 레벨을 클리어할때 얻는 점수가 주어졌을때, 몇번 감소시키면 되는지 구하는 프로그램을 제작한다. 정답이 여러가지일 땐, 점수를 내리는 것을 최소한으로 하는 방법을 찾아야 한다.
1-2. 제한 사항
- 첫 줄에 레벨의 수 N이 주어지며, 1 이상 100 이하
- 다음 줄부터는 각 레벨을 클리어하면 얻는 점수가 주어지며, 점수는 20,000보다 작은 양의 정수
2. 구현
2-1. 풀이
단순하게 마지막 레벨부터 첫 스테이지까지 반복문을 돌려 이전의 점수를 변수에 저장하고 그보다 한단계 낮은 수로 바꿔주었다.
2-2. 코드
#include <iostream>
using namespace std;
int scores[100];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int N, preNum, count, result = 0;
cin >> N;
for (int i = 0; i < N; i++) cin >> scores[i];
preNum = scores[N - 1];
for (int i = N - 1; i >= 0; i--) {
if (i == N - 1) continue;
else if (scores[i] >= preNum) {
count = scores[i] - preNum + 1;
result += count;
scores[i] -= count;
}
preNum = scores[i];
}
cout << result;
return 0;
}