Coding Is My Life

코딩은 인생

그리디 알고리즘

[백준/C++][한 줄로 서기(1138번)]

산기대 컴공 2020. 12. 6. 23:55
728x90

문제

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

 

1138번: 한 줄로 서기

첫째 줄에 사람의 수 N이 주어진다. N은 10보다 작거나 같은 자연수이다. 둘째 줄에는 키가 1인 사람부터 차례대로 자기보다 키가 큰 사람이 왼쪽에 몇 명이 있었는지 주어진다. i번째 수는 0보다

www.acmicpc.net

문제 해결

1. 입력받을 때부터 정렬된 상태이다.

2. 입력받고 그 해당하는 노드가 앞에 몇 명 있는지 확인한다.

3. 만약 앞에 2 사람이 있으면 두 칸 뒤에 앉으면 된다.

4. 하지만 두 칸 뒤에 사람이 이미 있으면 그 다음칸으로 가서 다시 확인한다.

5. 2~3단계를 반복한다.

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main(void){
    int N,left;
    int ary[11= {0,}; //0은 빈자리로 한다.
    cin >> N;
    for(int i = 0;i<N;i++){
        cin >> left;
        for(int j = 0;j<N;j++){
            if(left == 0&&ary[j] == 0){ //만약 자기앞에 아무도 없고 빈자리라면 
                ary[j] = i+1//착석한다.
                break;
            }
            //만약 아직 자기앞에 사람이 더 있으면 한칸씩 뒤로 가주면서 left가 0이 될떄까지 계속 뒤로 가준다.
            else if(ary[j] == 0){left--;}
        }
    }
    for(int i = 0;i<N;i++){
        cout << ary[i] << " ";
    }
}
cs
728x90