본문 바로가기
코딩테스트 준비/백준

[백준 1181번][C++] 단어 정렬

by 스테디코디스트 2023. 8. 1.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <algorithm>
#include <cstdlib>
using namespace std;

int main()
{
	// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;

	// 중복이 없어야 하므로 set 컨테이너 사용
	// 각 문자의 길이별로 구분하여 담음
	set<string> dictionary[51]; 

	for (int i = 0; i < N; i++)
	{
		string s;
		cin >> s;
		
		dictionary[s.size()].insert(s);
	}

	for (int i = 0; i < 51; i++)
	{
		if (dictionary[i].size() <= 0) continue;

		for (set<string>::iterator iter = dictionary[i].begin(); iter != dictionary[i].end(); iter++)
		{
			cout << iter->c_str() << "\n";
		}
	}
	
	return 0;
}

<풀이과정>

1. N을 입력받고, 문자들을 담을 컨테이너를 선택한다.

2. 각 문자의 길이별로 배열에 담아 구분하고 담아진 문자들은 중복이 없고 사전순으로 정렬되어야 하므로 중복되는 문자를 제거해주고 사전순으로 정렬해주는 set 컨테이너를 사용했다.

3. string형 set를 51개 담을 배열 dictionary를 선언해준다.(각 문자의 길이를 인덱스로 하기위해 편의상 51개로 설정)

4. N만큼 반복하며 입력 s를 받고, s의 길이에 해당되는 dictionary의 인덱스번호에 s를 넣어준다.

5. dictionary의 50번째 인덱스까지 반복하며 크기가 0인 경우는 넘어가고 그렇지 않으면 각 배열의 원소들을 순서대로 출력해준다.


<코멘트>

생각보다 쉽게 풀어졌다!

항상 어떤 컨테이너가 맞을지 먼저 생각해보자!


<제출결과>