Algorithm

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

남 희 2021. 9. 4. 01:52

문제 링크

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net


문제 한 줄 요약

문제에서 주어진 '요구 조건 그대로' 단어 정렬하기

 

풀이

문제 자체가 복잡하지는 않았습니다.

적혀 있는 문장 순서대로 따라 풀면 해결되는 문제입니다.

저는 다음과 같은 순서로 문제를 해결했습니다.

1. 입력 데이터 저장하기
2. 문제에서 주어진 조건으로 정렬하기
3. 정렬한 데이터 출력하기

 

자세한 풀이는 다음과 같습니다!


1. Input Data : 개수 N과 N개의 string 입력받기

	int N;
	cin >> N;

	for (int i = 0; i < N; i++)
		cin >> words[i];

 

2. Sort Words(string array) : 입력받은 string을 아래 조건으로 정렬하기

   (1) 길이가 짧은 것부터 앞으로.

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

 

2-1. main 함수에서는 sort() 함수를 호출

sort(words, words+N, compare); // compare ret value : false -> swap

 

2-2. sort에서 요구되는 조건을 compare 함수에서 구현

  sort 함수는 세 번째 인자가 false일 때, swap 되기 때문에 compare 함수에서 요구 조건을 그대로 써주고 return 하면 됩니다.

bool compare(string s1, string s2) {
	return s1.length() < s2.length() 
		|| (s1.length() == s2.length() && s1 < s2);
}

 

3. Output Data : 정렬한 단어를 출력하기

  ⚠주의 : 문제에서 같은 단어는 한 번만 출력하라고 했습니다!

	for (int i = 0; i < N; i++) {
		if (i == 0 || words[i-1] != words[i])
			cout << words[i] << endl;		
	}

이 순서대로 구현하면 문제가 해결됩니다.

 

전체 Code

위 문제의 전체 코드는 아래 링크로 이동하시면 볼 수 있습니다😄

 

GitHub - nhee0410/Challenge100_Code_Test_Study: 알고리즘 코딩테스트 문제풀이 스터디 - 100문제를 목표로🔥

알고리즘 코딩테스트 문제풀이 스터디 - 100문제를 목표로🔥🔥 . Contribute to nhee0410/Challenge100_Code_Test_Study development by creating an account on GitHub.

github.com

 

문제 후기

더보기

문제에 나와 있는 문장 그대로 따라 구현하면 풀리는 문제.

푸는 과정을 고민해야 하는 문제는 아니었다.

sort 함수에 대한 이해가 낮다면 푸는 데에 더 걸렸을 듯하다.

c++로 풀면 구현 문제에 더 가깝지 않나 하는 생각이 들었다.

'Algorithm' 카테고리의 다른 글

[백준] 1978번 : 소수 찾기 (C++)  (0) 2021.11.27
[백준] 4375번 : 1 (C++)  (0) 2021.11.25
[백준] 10430번 : 나머지 (C++)  (0) 2021.11.24
[백준] 1037번 : 약수 (C++)  (0) 2021.11.23
[백준] 10951번 : A+B - 4 (C++)  (0) 2021.07.27