본문 바로가기
백준

[1181] 단어 정렬

by kmyobin 2022. 7. 22.

 

1. 길이가 짧은 순으로

2. 길이가 같으면 사전 순으로

 

정렬하는 문제이다

char형 배열로 할까 고민했지만 string 배열로 문제를 풀었다

같은 단어가 입력될 수도 있으므로 같은 단어가 입력되면 배열에 넣지 않았다

 

algorithm 라이브러리에 있는 sort함수를 이용하였다

근데 조건이 2개 있으니 cmp 함수를 만들어 주었다

 

사전순으로 정렬하려면 a<b, 길이순으로 정렬하려면 a.length()<b.length()을 이용한다

 

혹여나 시간초과가 날까봐 printf 함수를 사용하였는데, 이 때 string을 출력하기 위해 c_str()함수를 사용하였다

완성된 코드는 다음과 같다

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

int N;
string A[20000];

bool cmp(string a, string b) {
	if (a.length() == b.length()) { // 길이가 같으면
		return a < b; // 사전순으로 정렬
	}
	return a.length() < b.length(); // 길이순으로 정렬
}


int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	int k = 0;

	cin >> N;

	for (int i = 0; i < N; i++)
	{
		bool isit = false;
		string input;
		cin >> input;
		for (int j = 0; j < k; j++) {
			if (input == A[j]) {
				isit = true;
				break;
			}
		}
		if (isit == true) {} // 이미 입력되어있으면 pass
		else { // 새로 입력됨이 확인되면 A에 넣음
			A[k] = input; k++;
		}
	}
	
	sort(A, A + k, cmp);

	for (int i = 0; i < k; i++) {
		printf("%s\n", A[i].c_str());
	}

}

'백준' 카테고리의 다른 글

[10815] 숫자 카드  (0) 2022.07.27
[18870] 좌표 압축  (0) 2022.07.22
[2108] 통계학  (0) 2022.07.17
[1427] 소트인사이드  (0) 2022.07.17
[10989] 수 정렬하기 3  (0) 2022.07.08

댓글