본문 바로가기
C++/백준 코딩테스트 풀이 C++

C++ 1181 단어 정렬

by jjiing 2022. 7. 4.

<algorithm>의 sort를 사용해 길이/사전순 배열로 정렬해주고,

출력할 때 중복된 벡터는 넘어가게 해준다.

 

 

<note>

1.

sort 함수를 사용해 단순 오름차순, 내림차순 배열 뿐만아니라, bool 함수를 직접 지정해 세번째 매개변수로 넣어주면

내가 원하는대로 정렬할 수 있다.

 

이 문제의 경우 Compare 함수가 해당 부분인데, return 값으로 원하는 경우(길이순 배열, 사전 순 배열)에 true 값을 주게 설정한다.

참고로 string 변수에 비교연산자를 넣으면 알아서 사전순 배열로 계산이 된다.

 

2.

continue문은 현재 루프 몸체의 끝으로 이동하는 편리한 방법을 제공한다. 현재 반복을 일찍 종료하고자 할 때 유용하다.

쉽게 말해서 coninute 문을 사용하여 일부 코드를 실행하지 않고 점프할 수 있다.

특정 경우에 반복문의 내용을 실행하고 싶지 않을 경우 사용하면 유용하다.

 

 

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

using namespace std;
bool Compare(string aString,string bString)
{
	if (aString.length() != bString.length())
		return aString.length() < bString.length();	//길이가 다르다면 길이순 정렬
	else
		return aString < bString;	//길이가 같다면 사전순 정렬
		
}
int main()
{
	int N;
	cin >> N;
	vector<string> words;

	//입력
	for (int i = 0; i < N; i++)
	{
		string word;
		cin >> word;
		words.push_back(word);
	}


	//compare : 원하는대로 처리해 정렬할 사용자 지정 함수
	sort(words.begin(), words.end(), Compare);	


	//같으면 출력하지 않고 넘어가는 함수
	//아래 i-1연산을 위해 0번째는 따로 출력해주고 i=1부터 for문을 돌린다.
	cout << words[0]<<endl;		
	for (int i = 1; i < N; i++)
	{
		if (words[i] == words[i - 1])
			continue; //루프의 몸체 끝으로 점프한다. (해당 경우 코드를 실행하지 않고 넘어간다)
		
		cout << words[i] << endl;
	}
	
		

}

'C++ > 백준 코딩테스트 풀이 C++' 카테고리의 다른 글

C++ 1436 영화감독 숌  (0) 2022.07.15
C++ 2884 알람시계  (0) 2022.07.06
C++ 10871 X보다 큰 수  (0) 2022.07.03
C++ 2869 달팽이는 올라가고 싶다  (0) 2022.07.02
C++ 2798 블랙잭  (0) 2022.07.01