문제출처 : https://www.acmicpc.net/problem/2847
실제로 문제읽다가 실증나서 유투브1시간동안보다가 이제 풀어야지~ 하고 5분만에 풀었다.
그만큼 쉽다는 뜻이다.code
#include <stdio.h> int main() { int N, score[100] = { 0 }, i, cnt = 0; scanf("%d", &N); for (i = 0; i < N; i++) scanf("%d", &score[i]); for (i = N - 2; i >= 0; i--) { while (score[i] >= score[i + 1]) { score[i]--; cnt++; } } printf("%d", cnt); return 0; }
문제에서 항상 답이존재하는 경우만 취급한다고 했으니까, 항상 난이도순으로 입력을받을것이고, 곧 점수가 오름차순이 되어야 한다는것을 의미한다.
그러니까 마지막으로 입력받은(인덱스 N-1인)점수가 가장 큰점수이여야 한다.
점수를 내리는것을 최소화해야하니까 최소의 경우는 1만큼 차이나야하니까,
반복문과 조건으로 score[i]가 score[i+1]보다 작아질때까지 -1을 빼고, cnt를 세주면된다.