728x90
첫번째줄에는 사람 수를 받고 두번째줄은 왼쪽에 자신보다 큰 사람이 몇명이 있는지를 나타냅니다.
두번째줄에 차례대로 키가 1부터 2, 3 .... 으로 증가합니다.
예제에는 4명이 입력되었으며 키가 1, 2, 3, 4 인 사람이 있다고 볼 수 있습니다.
키가 1인 사람은 왼쪽에 자신보다 큰 사람이 2명
키가 2인 사람은 왼쪽에 자신보다 큰 사람이 1명
키가 3인 사람은 왼쪽에 자신보다 큰 사람이 1명
키가 4인 사람은 왼쪽에 자신보다 큰 사람이 0명 있으므로
4 2 1 3 순으로 서있습니다.
3가지 절차를 통해 문제를 풀었습니다.
1. 왼쪽큰인원 +1명을 하게 되면 큰 인원을 제외한 자리를 찾을 수 있습니다.
2. 왼쪽에 작은 인원이 몇명 있는지 체크를 하면서 그 만큼 더 오른쪽으로 이동합니다.
3. 이미 자리에 인원이 있으면 그 오른쪽으로 이동해서 있는지 확인하고 없으면 위치에 자리합니다.
#include <iostream>
using namespace std;
int height[10000];
int leftPeople[10000];
int people[10000];
void init(){
for(int i=0; i<10000; ++i){
height[i] = i+1;
leftPeople[i] = -1;
people[i] = -1;
}
}
int main(int argc, char *argv[])
{
init();
int cycle, index, count, check;
cin >> cycle;
for(int i=0; i<cycle; ++i){
count = 0;
cin >> leftPeople[i];
check = leftPeople[i];
for(int j=0; j<check; ++j){
if(people[j]!=-1 && people[j] < height[i]){
check++;
count++;
}
}
index = leftPeople[i]+count;
while(people[index]!=-1){
index++;
}
people[index]=height[i];
index = 0;
}
for(int i=0; i<cycle; ++i){
cout << people[i] << " ";
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 6359번 만취한 상범 (0) | 2019.03.27 |
---|---|
[C++] 백준 5545번 최고의 피자 (0) | 2019.03.08 |
[C++] 백준 4485번 녹색 옷 입은 애가 젤다지? (0) | 2019.03.06 |
[C++] 백준 1922번 네트워크 연결 (0) | 2019.03.06 |
[C++] 백준 11404번 플로이드 (0) | 2019.03.06 |