코딩 테스트

[코딩테스트 33일차] BAEKJOON 1181번 : 단어 정렬

sunlight-dby 2025. 6. 21. 04:05

[BAEKJOON 1181번 : 단어 정렬]

[문제]


[고찰]

해당 문제에 대해 아예 접근조차 하지 못해, 어쩔 수 없이 다른 분들의 풀이를 볼 수 밖에 없었습니다..


[개념]

해당 문제의 핵심 아이디어는 사용자 정의 sort를 쓸 수 있는지에 대한 것이었습니다.

 

bool compare()이라는 함수를 만들어,

입력받은 words를 sort(words.begin(), words.end(), compare);로 사용자 정의 정렬을 하였습니다.

 

compare 함수에서는,

1. 길이가 다르다면 길이에 따라 정렬하게하고,

2. 길이가 같다면 알파벳 순서에 따라 정렬하게 구현하였습니다.

bool compare(const string& a, const string& b)
{
	if (a.length() != b.length())
		return a.length() < b.length();
	return a < b;
}

 

정렬을 모두 마친 후에는, 전에 단어와 같은 단어가 아닐때만 출력하게 합니다.

string prev = "";
for (const string& word : words)
{
	if (word != prev)
	{
		cout << word << '\n';
		prev = word;
	}
}

[정리]

알고 있었던 개념이었지만, 정작 활용할 생각은 못했습니다.

전에 올렸던 다짐과 동일하지만, 많은 문제량이 이를 해결해줄 것 같습니다.


[Solution]

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

using namespace std;

// BAKEJOON 1181번 : 단어 정렬
bool compare(const string& a, const string& b)
{
	if (a.length() != b.length())
		return a.length() < b.length();
	return a < b; 
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);

	int n;
	cin >> n;

	vector<string> words(n);

	for (int i = 0; i < n; i++)
    {
		cin >> words[i];
	}

	sort(words.begin(), words.end(), compare);

	string prev = "";
	for (const string& word : words)
    {
		if (word != prev)
        {
			cout << word << '\n';
			prev = word;
		}
	}

	return 0;
}