새소식

코딩테스트/백준_실버

[C++][백준 1138] 한 줄로 서기

  • -

[문제]

1138번: 한 줄로 서기 (acmicpc.net)

 

1138번: 한 줄로 서기

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

www.acmicpc.net


[문제 풀이]

문제를 이해하는데 많이 힘들었던 문제.

 

0으로 n만큼 차있는 벡터가 있을 때 각자의 숫자만큼 오른쪽으로 이동한 뒤에 해당 위치를 차지하는 내용이다.

 

예를들어 보기에서 나온 2 1 1 0 의 경우에는

0 0 0 0

이라는 칸을 1 / 2 / 3 / 4 번의 사람이 2 / 1 / 1 / 0 번 뛰어넘어서 들어가는 내용이다.

 

1번 사람의 경우 : 

0 0 1 0

숫자 0을 2만큼 뛰어넘었으니 3번 자리에 1을 넣자.

 

2번 사람의 경우 : 

0 2 1 0

숫자 0을 1만큼 뛰어넘었으니 2번쨰 자리에 2를 넣자.

 

3번 사람의 경우 : 

0 2 1 3

숫자 0을 1만큼 뛰어넘으니 4번째 자리에 들어갔다.

 

4번 사람의 경우 : 

4 2 1 3

숫자 0을 0번 뛰어넘으니 제일 첫번째 자리에 위치시키자.

 

이제 해당 내용을 코드로 작성해보도록 하자.


[코드]

#include <iostream>
#include <vector>

using namespace std;

int main(){
    int n;
    cin>>n;
    vector<int> people(n,0);
    for(int i = 1;i<=n;i++){
        int temp = 0;
        cin>>temp;
        
        for(int j = 0;j<n;j++){
            if(temp == 0 && people[j] == 0){
                people[j] = i;
                break;
            }
            if(people[j] == 0 ){
                temp--;
            }
        }
    }
    for(int i = 0;i<n;i++){
        cout<<people[i]<<" ";
    }

    return 0;
}

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.