백준 1874번 스택 수열

내가 작성한 코드(1)

#include <stdio.h>

int main()
{
	int stack[100000];
	char array[400001] = { 0 };
	int top = 0;//현재 top index
	int cur = 1;//현재 넣어야 하는 숫자
	int count = 0;//array의 인덱스
	int i, T;
	int data;
	scanf("%d", &T);
	for (i = 0; i < T; i++)
	{
		scanf("%d", &data);
		if (cur <= data)
		{
			while (cur <= data)
			{
				top++;
				stack[top] = cur;
				cur++;
				array[count++] = '+';
				array[count++] = '\n';
			}
			top--;
			array[count++] = '-';
			array[count++] = '\n';
		}
		else
		{
			if (data == stack[top])
			{
				top--;
				array[count++] = '-';
				array[count++] = '\n';
			}
			else
			{
				printf("NO");
				return 0;
			}
		}
	}
	printf("%s", array);
	return 0;
}

처음에는 printf를 여러번 했으나, 시간이 오해 걸려서 개행문자를 중간중간 삽입하는 꼼수를 활용하였다.

#include <stdio.h>

int main()
{
	int stack[100000];
	stack[0] = 0;//뒤 코드에서 if문이 있는데 거기서 stack[0]이 임의의 숫자라 data보다 커버리면 처음부터 메인함수가 종료될 수 있으므로 영향이 없게 0으로 처리
	char array[400001] = { 0 };
	int top = 0;
	int cur = 1;
	int count = 0;
	int i, T;
	int data;
	scanf("%d", &T);
	for (i = 0; i < T; i++)
	{
		scanf("%d", &data);
		if (stack[top] > data)//data가 stack[top]보다 작으면 안 되므로
		{
			printf("NO");
			return 0;
		}
		else
		{
			while (cur <= data)//cur가 data이하인 동안, 즉 stack에 data까지 담길때까지 stack에 처음 cur부터 data까지 넣기
			{
				top++;
				stack[top] = cur;
				cur++;
				array[count++] = '+';
				array[count++] = '\n';
			}
			top--;//stack[top]을 data로 만들고 data를 pop
			array[count++] = '-';
			array[count++] = '\n';
		}
	}
	printf("%s", array);
	return 0;
}

if문을 하나 없애서 시간을 줄이려고 했으나 시간이 줄어들진 않았다.
대신 코드가 간결해졌다.

좋은 웹페이지 즐겨찾기