728x90
SMALL
백준 문제 풀이: 1181 [단어 정렬]
문제 링크: https://www.acmicpc.net/problem/1181
문제 설명:
알파벳 소문자로 이루어진 단어 n개가 주어질 때, 아래와 같은 조건으로 단어들을 정렬하는 프로그램을 작성하세요:
- 길이가 짧은 것부터
- 길이가 같다면 사전 순으로
중복된 단어는 한 번만 출력합니다.
문제 해결 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool compare(string a, string b) {
if (a.length() == b.length()) {
return a < b; // 사전 순으로 정렬
} else {
return a.length() < b.length(); // 길이 순으로 정렬
}
}
int main() {
int T;
string n[20001];
cin >> T;
for (int i = 0; i < T; i++) {
cin >> n[i];
}
sort(n, n + T, compare); // 사용자 정의 비교 함수를 이용한 정렬
cout << n[0] << '\n'; // 첫 단어 출력
for (int i = 1; i < T; i++) {
if (n[i] != n[i - 1]) { // 중복 제거
cout << n[i] << '\n';
}
}
}
코드 설명
- 핵심 아이디어: 단어의 길이와 사전 순서를 고려해 사용자 정의 비교 함수로 정렬합니다.
- 구현 세부사항:
- 입력된 단어를 배열에 저장합니다.
sort
함수에 사용자 정의 비교 함수compare
를 전달해 정렬합니다.- 중복된 단어는 출력 시 제거합니다.
- 시간 복잡도: O(n log n)
- 정렬 과정에서 O(n log n)
- 중복 제거 및 출력 과정에서 O(n)
결과
입력된 단어를 조건에 맞게 정확히 정렬하며, 중복 없이 출력합니다. 최적화된 정렬 알고리즘을 활용하여 효율적으로 동작합니다.
다른 접근 방식이나 궁금한 점이 있다면 알려주세요!
728x90
LIST
'BAEKJOON > 문자열' 카테고리의 다른 글
백준 10820번 [문자열 분석](C++) -yes6686- 티스토리 (0) | 2024.06.29 |
---|---|
백준 2789번 [유학 금지](C++) -yes6686- 티스토리 (0) | 2024.05.06 |
백준 5525번 [IOIOI](C++)-yes6686- 티스토리 (0) | 2023.12.21 |
백준 2675번 [문자열 반복](C++)-yes6686- 티스토리 (1) | 2023.12.18 |
백준 1157번 [단어 공부](C++)-yes6686- 티스토리 (0) | 2023.12.16 |