-
1874-스택&순열 본문
틀린 코드? 왜틀렸는지 모르겠지만 틀렸다고 나온다. 예제입력시 잘 돌아가긴 한다.
#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 |