문제

문제 링크

문제 접근

  • 이 문제는 위상정렬로 풀 수 있는 듯한 문제였다.
  • n번 만큼 다음과정을 반복한다.
  • 처음부터 보며 arr 값이 0이면서 아직 출력하지 않은 사람을 찾아 출력해주고 그 이전에 있는 모든 사람의 값을 하나씩 빼주고 이미 출력했음을 표시해준다.

코드

#include <cstdio>
int n, arr[11], visited[11];
int main(){
    scanf("%d", &n);
    for(int i = 0; i < n; i++)scanf("%d", &arr[i]);
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(arr[j] || visited[j])continue;
            printf("%d ", j + 1);
            visited[j] = 1;
            for(int k = 0; k < j; k++)arr[k]--;
            break;
        }
    }    
}

느낀점

  • 가장 작은 값을 계속 선택하는 것임으로 그리디라고 볼수도 있겠다.
  • 빠르게 접근법을 떠올릴 수 있음에 감사하다!