백준

백준 : 1181번 단어 정렬(c++)

TIN9 2023. 9. 23.
반응형

백준 링크

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

코드 풀이

  • vector<string> 변수 선언 후 resize()
    resize()하는 이유는 입력으로 주어진 N값이 고정되어 있기 때문(push_back()할때의 단점 해결)
  • 입력으로 주어진 단어를 vecString에 저장
  • 정렬을 하는데 정렬 방식은 SortFunc함수 참고
  • 출력 - 0번 인덱스의 값은 바로 출력 이후 인덱스의 값들은 이전 값과 비교 후 동일하다면 continue 다르다면 출력

코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool SortFunc(const string& A, const string& B)
{
	if (A.length() < B.length())
		return true;

	else if (A.length() == B.length())
	{
		size_t Size = A.length();

		for (size_t i = 0; i < Size; ++i)
		{
			if (A[i] < B[i])
				return true;
			else if(A[i] > B[i])
				return false;
		}
	}
	else
		return false;

	return false;
}

int main()
{
	int N;

	cin >> N;

	vector<string> vecString;
	vecString.resize(N);
	for (int i = 0; i < N; ++i)
	{
		string Word;
		cin >> Word;
		vecString[i] = Word;
	}

	sort(vecString.begin(), vecString.end(), SortFunc);

	// 첫 인덱스 값은 바로 출력
	cout << vecString[0] << '\n';
	for (int i = 1; i < N; ++i)
	{
		// 이전 인덱스의 값이랑(문자열) 비교해서 같다면 출력x
		if (vecString[i] == vecString[i - 1])
			continue;

		cout << vecString[i] << '\n';
	}
}
반응형

댓글