BOJ-1181 | 단어정렬 c++

·2024년 9월 8일

Algorithm (2024)

목록 보기
7/10
post-thumbnail

✏️ 1181-단어정렬
🌊 GitHub @xaesu, Study-Algorithm


접근

✔️ 삽입정렬 + 여러가지 정렬 조건 + 문자열 중복체크

  1. 삽입정렬 : 차례차례 범위를 늘려가며 정렬하는 알고리즘
    선택 값보다 앞에 위치하는 원소들과 비교 → 두번째 원소부터 체크
    ☁️ 한 눈에 끝내는 C언어 기초 : 삽입 정렬
  2. 논리연산자를 사용한 여러가지 정렬 조건 부여
    길이 순 정렬 : temp.length() < arr[j].length()
    길이가 같다면 사전 순 정렬 : temp.length() == arr[j].length() && temp < arr[j]
  3. 문자열 중복 체크 → 정렬 상태 이므로 앞/뒤 요소와 비교하여 중복 요소이면 출력 안함



풀이

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

int main()
{
	int N;
	cin >> N;

	string* arr = new string[N];

	// 입력
	for (int i = 0; i < N; i++)
		cin >> arr[i];

	int j;
	string temp;

	// 문자열 길이 순으로 정렬
	for (int i = 1; i < N; i++) {
		temp = arr[i];
		j = i - 1;

		// 길이가 같다면 사전 순으로 정렬
		while (j >= 0 && (temp.length() < arr[j].length() ||
				(temp.length() == arr[j].length() && temp < arr[j])))
		{
			arr[j + 1] = arr[j];
			j--;
		}
		arr[j + 1] = temp;
	}

	// 정렬된 상태에서 앞의 요소와 중복인 지 체크 후 고유한 요소만 출력
	for (int i = 0; i < N; i++)
	{
		if (i == 0 || arr[i] != arr[i - 1])
			cout << arr[i] << '\n';
	}

	delete[] arr;
}
profile
🌦️ @xaesu

0개의 댓글