C언어

백준 11656번 접미사배열 : compare ftswap substr 함수

mcdn 2020. 8. 18. 18:11
반응형

예제 입력 1 복사

baekjoon

예제 출력 1 복사

aekjoon baekjoon ekjoon joon kjoon n on oon

 

 

#include <iostream>
#include <string>
using namespace std;

int compare(string a, string b)
{
	if (a > b) return 1;
	else return 0;
}

void ft_swap(string* a, string* b)
{
	string temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int main(void)
{
	string str;
	cin >> str;
	string temp = "";
	int len = str.size();
	string arr[1001];
	for (int i = 0; i < len; i++)
	{
		temp = str.substr(i, sizeof(str) - i);
		arr[i] = temp;
	}
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = i + 1; j < len; j++)
		{
			if (compare(arr[i], arr[j]))
				ft_swap(&arr[i], &arr[j]);
		}
	}
	for (int i = 0; i < len; i++)
		cout << arr[i] << "\n";
}

처음 코드 

이때 j = i + 1로 고치고 좋아했는데 틀림 

아무리봐도 틀린곳을 몰랐는데

어떤 코드가 sizeof(str)대신 len 으로 쓴 거보고 고침 

#include <iostream>
#include <string>
using namespace std;

int compare(string a, string b)
{
	if (a > b) return 1;
	else return 0;
}

void ft_swap(string* a, string* b)
{
	string temp;
	temp = *a;
	*a = *b;
	*b = temp;
}
int main(void)
{
	string str;
	cin >> str;
	string temp = "";
	int len = str.size();
	string arr[1001];
	for (int i = 0; i < len; i++)
	{
		temp = str.substr(i, len - i);
		arr[i] = temp;
	}
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = i + 1; j < len; j++)
		{
			if (compare(arr[i], arr[j]))
				ft_swap(&arr[i], &arr[j]);
		}
	}
	for (int i = 0; i < len; i++)
		cout << arr[i] << "\n";
}

그러니까 성공 정답!

 

sizeof(str)은 진짜 확보한 메모리를 돌려주나봄 len이어야 지금 문자열 따라 바뀌는 듯 

 

이걸로 자료구조 끝!

반응형