컴굥일지
[BOJ/백준 2847][C++] 게임을 만든 동준이 본문
반응형
문제
https://www.acmicpc.net/problem/2847
문제 내용
각 레벨에서 얻을 수 있는 점수를 오름차순으로 만들어야 한다.
즉, 최고점을 기준으로 각 단계를 몇 번 감소시켜야 할지를 계산하면 된다.
항상 답이 존재하는 경우만 입력으로 주어진다고 되어있으므로, 점수를 감소시키다가 음수가 되는 일은 발생하지 않는다.
문제 풀이
그렇게 어려운 문제는 아니다.
배열을 뒤에서부터 반복문을 돌면서 i번째 값과 i-1의 값을 비교하면 된다.
조건문을 통해 i번째 값이 큰 경우는 별다른 처리 없이 넘어가면 된다.
i번째 값이 작은 경우 i-1번째 값과 i번째 값이 적어도 1은 차이가 나야 하기 때문에 (두 값의 차이 -1)를 구하여 계산하면 된다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, a, num, cnt;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
//입력
cin >> n;
vector<int>v;
for (int i = 0; i < n; i++) {
cin >> a;
v.push_back(a);
}
//문제 해결
cnt = 0;
for (int i = n - 1; i > 0; i--) {
if (v[i] > v[i - 1]) continue; //배열이 오름차순이라면 건들지 않는다
num=v[i - 1] - v[i] + 1; //두 레벨의 점수 차를 구하여
v[i - 1] -= num; //낮은 레벨은 점수를 감소시킨다
cnt += num; //얼만큼 감소시켰는지 추가한다
}
//결과 출력
cout << cnt << '\n';
}
문제 코드 설명
1) 입력
레벨의 개수 N을 입력받아 배열을 생성할 것이기 때문에 vector를 사용했다.
2) 문제 해결
반복문과 조건문을 사용하면 된다.
이때, 반복문 사용시 인덱스를 조심해야 한다.
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 16206][C++] 롤케이크 (0) | 2022.01.07 |
---|---|
[BOJ/백준 14659][C++] 한조서열정리하고옴ㅋㅋ (0) | 2022.01.06 |
[BOJ/백준 2839][C++] 설탕 배달 (0) | 2022.01.04 |
[BOJ/백준 1931][C++] 회의실 배정 (0) | 2022.01.03 |
[BOJ/백준 2346][C++] 풍선 터뜨리기 (0) | 2021.07.11 |
Comments