조회 수 507 추천 수 0 댓글 0

#include <stdio.h>

int check[100000]={0}; //지연수=불가능 -1=위치
int height[100000]={0};
int num[100000]={0};
int answer[100000]={0};

void line_height(int n); //키가 작은 순서대로 정렬
void line_people(int n); //사람들의 순서
//int where_num(int n, int a); //그 사람의 위치
//void check_no(int n); //위치가 정해진 키는 더이상 다른 위치에 올수 없으므로 불가능
//void pr(int n);
int main(void)
{
	int n, i;

	//입력 시작
	scanf(" %d", &n); //전체 사람의 수

	for(i=0; i<n; i++)
	{
		scanf(" %d", &height[i]); //사람들의 키
	}
	for(i=0; i<n; i++)
	{
		scanf(" %d", &num[i]); //자가 앞에 있는 사람들 중에서 자기보다 키가 작거나 같은 사람들의 수
	}
	//입력 끝

	line_height(n); //키가 작은 순서대로 정렬
	line_people(n);

	//정답 출력
	for(i=0; i<n; i++)
	{
		printf("%d\n", answer[i]);
	}

	return 0;
}
void line_height(int n)
{
	int i, j, temp, min;

	for(i=0; i<(n-1); i++)
	{
		min=i;
		for(j=i+1; j<n; j++)
		{
			if(height[j]<height[min])
			{
				min=j;
			}
		}
		if(min!=i)
		{
			temp=height[i];
			height[i]=height[min];
			height[min]=temp;
		}
	}
}
void line_people(int n)
{
	int i, j, w, c, cnt=1;

	for(i=n-1; i>=0; i--)
	{
		if(i!=0)
		{
			c=0;
			for(j=0; c<num[i]; j++)
			{
				if(check[j]!=-1)
				{
					check[j]=cnt; //작은 순서대로 num[i]개 만큼 불가능
					c++;
				}
			}
			c=0;
			for(j=n-1; c<(i-num[i]); j--)
			{
				if(check[j]!=-1)
				{
					check[j]=cnt; //큰 순서대로 (i-num[i])개 만큼 불가능 
					c++;
				}
			}
		}

		for(j=0; j<n; j++)
		{
			if(check[j]!=cnt && check[j]!=-1) //불가능 하지 않은 위치 
			{
				w=j;
				answer[i]=height[w];
				check[w]=-1;
				break;
			}
		}

		//pr(n);
		//check_no(n);
		//pr(n);
		//printf("\n");
		cnt++;
	}
}
/*int where_num(int n, int a)
{
	int i;

	for(i=0; i<n; i++)
	{
		if(check[i]!=a && check[i]!=-1) 
			return i;
	}
}*/
/*void check_no(int n)
{
	int i;

	for(i=0; i<n; i++)
	{
		if(check[i]==1)
		{
			check[i]=0;
		}
	}
}*/
/*void pr(int n)
{
	int i;

	for(i=0; i<n; i++)
	{
		printf("%d ", check[i]);
	}
	printf("\n");
}*/
//뒤에서부터 배열
//만약 작은 수가 4개라면  작은 순대로 4개 제외, 큰 순서재로 전체-4개 제외 



List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 글쓰기는 하루 5개, 댓글은 10개만 가능합니다. 좋은아빠되기 2019.02.15 298
공지 키보드 화살표값 출력 좋은아빠되기 2016.11.19 1075
공지 원하는 좌표에 값 출력하기 좋은아빠되기 2016.11.19 2391
공지 Python(파이썬) 학습 자료 PDF 1 file 좋은아빠되기 2014.12.10 10287
공지 dev C++ 텍스트 색상변경 WinApi사용(textcolor 대용) 좋은아빠되기 2014.06.07 4713
공지 DEV-C++ 기본 코드 좋은아빠되기 2013.06.19 8250
공지 무료 C++ 컴파일러(윈도우용) DEV-C++ 좋은아빠되기 2013.06.18 18950
공지 이클립스 C++ 설치 파일들 좋은아빠되기 2013.06.18 37839
310 정올 기초다지기(aG005-포인터5) killerjack 2014.11.22 536
309 정올 기초다지기(포인터-자가진단5) killerjack 2014.11.15 533
308 홀수 짝수 for문(스민) 승민 2016.03.05 532
307 사이정수 갯수 구하기 테스트 버전 좋은아빠되기 2014.08.02 531
306 100이하 가장큰수 100이상 가장작은수 구하기 (승민) 승민 2016.04.16 515
305 정올 기초다지기(구조체-자가진단5) killerjack 2014.10.11 511
304 정올 기초다지기(aF002-구조체1) killerjack 2014.10.11 510
303 정올 함수2 자가진단1 정승준 2018.12.29 509
302 정올 - 실력키우기 - 나는 학급회장이다(투표) 조정미 2017.12.02 509
» 정올 - 알고리즘 - 줄세우기(2469) - Time Limit Exceed 조정미 2018.04.21 507
300 정올 기초다지기(포인터-자가진단7) killerjack 2014.11.15 507
299 정올 - 실력키우기 - 단어집합(하)(1535) 조정미 2018.01.06 505
298 영단어 입력한후 그단어중 가장큰 아스키코드 구하기(승민) 승민 2016.04.02 505
297 정올 기초다지기(문자열1-자가진단8) killerjack 2014.09.20 503
296 정올 파스칼삼각형 조정미 2017.11.18 486
295 정올 기초다지기(포인터-자가진단6) killerjack 2014.11.15 486
294 정올 기초다지기 함수3 자가진단 5 남쌤꺼 좋은아빠되기 2014.08.16 476
293 원 반지름 구하기 선우 2016.07.02 475
292 정올 기초다지기(aB001-문자열1) killerjack 2014.09.20 472
291 정올 기초다지기(aG002-포인터2) killerjack 2014.11.15 471
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 ... 26 Next
/ 26