[코딩테스트 C++] 게임을 만든 동준이

오늘의 문제

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

게임을 만든 동준이

접근 방식

  • 가장 낮추는 횟수를 줄이려면, 맨 끝에서부터 진행해서 그 다음 수(post)보다 커지는 경우, post 보다 1 작은 값으로 낮춰주면 된다.

나의 풀이

#include<iostream>
using namespace std;
int n;
const int MAX = 100;
int arr[MAX];

int solution(){
    int answer = 0;
    int post = arr[n-1];
    for(int i=n-2;i>=0;i--){
        if(post <= arr[i]){
            answer += arr[i]-post+1;
            post--;
        }else{
            post = arr[i];
        }
    }
    return answer;
}

다른 풀이

#include<cstdio>
int n,a[100],r;
int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", a+i);
    for (int i = n-1; i; i--) if (a[i-1] >= a[i]) r+=a[i-1]-a[i]+1,a[i-1] = a[i] - 1;
    printf("%d", r);
    return 0;
}

배울 점

  • 이분은 post를 따로 두지않고 배열 안에서만 풀이를 하셨다. 어케 저렇게 한줄로 하시는지

좋은 웹페이지 즐겨찾기