-

1874-스택&순열 본문

Algorithm/Baekjoon

1874-스택&순열

Boogallee 2018. 1. 11. 17:57





틀린 코드? 왜틀렸는지 모르겠지만 틀렸다고 나온다. 예제입력시 잘 돌아가긴 한다.


#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <stack>

#include <stdio.h>

#include <string>

#include <vector>



using namespace std;

bool flag[11];

int main()

{

bool fs = false;

int n;

cin >> n;

vector<int> V(n);

vector<char> cmd(200000);

vector<int> tmp(n);

stack<int> S;

for(int i = 0; i < n; i++)

{

cin >> V[i];

}

int j = 0;

int k = 0;

while (true)

{


for (int i = 1; i <= V[j]; i++)   // 이부분이 뭔가 마음에 안든다. 매우 비효율적이었는듯.

{

if (flag[i] != true)

{

flag[i] = true;

S.push(i);

cmd[k++] = '+';

}

}


tmp[j] = S.top();

S.pop();

cmd[k++] = '-';

j++;

if (S.empty()) break;

}


for (int i = 0; i < n; i++)

{

if (V[i] != tmp[i])

{

fs = true;

break;

}

}

if (!fs)

{

for (int i = 0; cmd[i]!='\0'; i++)

{

printf("%c\n", cmd[i]);

}

}

else

{

printf("NO");

}

system("pause");


return 0;

}




----------------------------------------------------------------------------------------------------------------------------------------------------------------

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

#include <stack>

#include <stdio.h>

#include <string>

#include <vector>



using namespace std;

bool flag[11];

int main()

{

bool fs = false;

int n;

cin >> n;

vector<int> V(n);

vector<char> cmd;

stack<int> S;

for(int i = 0; i < n; i++)

{

cin >> V[i];

}

int pos = 0;


for (int i = 1; i <= n; i++)     // 위의 코드처럼 삽집할 필요가 없다. 그냥 push 하다가 기존의 배열과 같은 수를 만나면 pop하면 그만이다.

{

S.push(i); cmd.push_back('+');


while (!S.empty() && S.top() == V[pos])

{

pos++; S.pop(); cmd.push_back('-');

}

}


if (!S.empty()) cout << "NO";

else

{

for (int i = 0; i<cmd.size(); i++)

{

printf("%c\n", cmd[i]);

}


}


system("pause");


return 0;

}

'Algorithm > Baekjoon' 카테고리의 다른 글

10845  (0) 2018.01.16
9012 괄호  (0) 2018.01.11
10828-스택기초  (0) 2018.01.11
10989 - 기수정렬[아직 해결못함]  (0) 2018.01.10
2751-병합정렬[아직 해결못함]  (0) 2018.01.10
Comments