문자열 정렬 알고리즘 LECTURE에 대한 제출 답안으로 아래와 같이 했습니다.
단순 입출력 문제는 아닌것 같고, 뭔가 제가 찾지 못하는 다른 예외가 있는것 같은데...
기본 구현 방식은
각 입력받은 스트링에서 앞에서 부터 2개씩 잘라 따로 array에 보관하고, 타겟 스트링에서 해당 문자열을 가진 애들을 모두 제거합니다. 그리고 원본 스트링과의 차이에서 /2를 하여 반복 스트링 갯수를 알아내고, 이것을 반복스트링갯수만큼 append하여 order string array에 카피합니다. 이 과정을 스트링의 길이가 0이될때까지 반복하며, 완료되면 order string array에 담긴 값들을 0인덱스 1인덱스의 char의 ASCII값을 이용하여 사전순으로 정렬 후 보여줍니다.
구현한 소스는 아래와 같습니다. 어느것이 문젠지 도통 감이 안잡히네요.
#include <string>
#include <iostream>
using namespace std;
int main()
{
int t = 0;
cin >> t;
string *arr = new string[t];
int id = t-1;
while (t > 0)
{
string s1 = "";
cin >> s1;
t--;
arr[t] = s1;
}
while (id >= 0)
{
string t1 = arr[id];
id -= 1;
int t2 = t1.length();
int f1 = t2 / 2;
bool is1 = true;
int n = 2;
string *ar2 = new string[(t2 / 2) + (t2 % 2)];
int i2 = 0;
while (is1)
{
string t3 = t1.substr(0, 2);
int p1 = 0;
while ((p1 = t1.find(t3)) != string::npos){
t1.erase(p1, t3.length());
}
p1 = 0;
if ((p1 = t2 - t1.length()) > 0)
{
string r1 = "";
for (int q = 0; q < p1 / 2; q++)
{
r1 += t3;
}
ar2[i2] = r1;
i2++;
}
t2 = t1.length();
if (t1.length() < 2)
{
if (t1.length() != 0)
{
ar2[i2] = t1;
i2++;
}
is1 = false;
break;
}
}
string *t3 = ar2;
string *o1 = new string[i2];
for (int c = 0; c < i2; c++)
{
string c0 = ar2[c];
int f1 = c0.at(0);
int s1 = 'z';
if (c0.length() >= 2)
{
s1 = c0.at(1);
}
int on = i2;
for (int d = 0; d < i2; d++)
{
if (c != d)
{
int c0_f1 = t3[d].at(0);
int c0_s1 = 'z';
int s1 = 'z';
if (t3[d].length() >= 2)
{
c0_s1 = t3[d].at(1);
}
if (f1 < c0_f1)
{
on -= 1;
}
else if (f1 == c0_f1 && s1 < c0_s1)
{
on -= 1;
}
else
{
if (on < i2 - 1)
{
on += 1;
}
}
}
}
int i0 = on - 1;
while (true)
{
if (o1[i0] != "")
{
i0 -= 1;
}
else
{
o1[i0] = c0;
break;
}
}
}
for (int i = 0; i < i2; i++)
{
cout << o1[i];
}
cout << endl;
}
return 0;
}
hecker304
안녕하세요.
문자열 정렬 알고리즘 LECTURE에 대한 제출 답안으로 아래와 같이 했습니다.
단순 입출력 문제는 아닌것 같고, 뭔가 제가 찾지 못하는 다른 예외가 있는것 같은데...
기본 구현 방식은
각 입력받은 스트링에서 앞에서 부터 2개씩 잘라 따로 array에 보관하고, 타겟 스트링에서 해당 문자열을 가진 애들을 모두 제거합니다. 그리고 원본 스트링과의 차이에서 /2를 하여 반복 스트링 갯수를 알아내고, 이것을 반복스트링갯수만큼 append하여 order string array에 카피합니다. 이 과정을 스트링의 길이가 0이될때까지 반복하며, 완료되면 order string array에 담긴 값들을 0인덱스 1인덱스의 char의 ASCII값을 이용하여 사전순으로 정렬 후 보여줍니다.
구현한 소스는 아래와 같습니다. 어느것이 문젠지 도통 감이 안잡히네요.
11년 전