728x90
🏆 목차.
🛒 문제
🎨 코드
#include<iostream>
#include<algorithm>
using namespace std;
bool compare(string a, string b)
{
if (a.length() < b.length()) return 1;
else if (a.length() > b.length()) return 0;
else return a < b;
}
int main()
{
int n;
cin >> n;
string* strs = new string[n];
for (int i = 0; i < n; i++)
{
string str;
cin>>str;
strs[i] = str;
}
sort(strs, strs + n, compare);
for (int i = 0; i < n; i++)
{
if (i > 0 && strs[i] == strs[i - 1]) continue;
cout << strs[i] << "\n";
}
return 0;
}
🎯 풀이
해당 문제는 sort 함수를 이용해서 간단하게 풀 수 있습니다.
단
1. 길이가 짧은 것부터
2. 길이가 같으면 사전 순으로 라는 조건이 있으므로 compare 함수를 만들었습니다.
compare 함수에서 주목할 점은 else 문에서 return a <b를 해주었다는 점인데 기본적으로 c++에서 string을 비교연산자를 사용하면 자동으로 사전순으로 비교해 줍니다.
또한 중복된 단어는 하나만 남기고 제거해야 한다고 했기 때문에
출력 시 이전 문자열과 비교하고 같다면 출력을 하지 않고 넘어가게 했고, i가 0일 때는 비교대상이 없기때문에 0보다 클때만 비교 하도록 했습니다.
if (i > 0 && strs[i] == strs[i - 1]) continue;
만약 위 조건문을
if (strs[i] == strs[i - 1] && i > 0) continue;
이렇게 변경하면 런타임 에러가 발생합니다.
그 이유는 왼쪽에서 오른쪽으로 검사를 진행하는데 i가 0일때 strs [-1]은 존재하지 않기 때문입니다.
728x90
'코딩테스트' 카테고리의 다른 글
[C++] 프로그래머스 : 문자열 겹쳐쓰기(replace) (1) | 2023.11.12 |
---|---|
[C++][sort] 백준 1431번 : 시리얼 번호 (1) | 2023.11.11 |
[C++][DP] 백준 11727번 : 2xn 타일링 2 (0) | 2023.10.20 |
[C++][DP] 백준 11726번 : 2xn 타일링 (1) | 2023.10.19 |
[C++][DP] 백준 1463번 : 1로 만들기 (0) | 2023.10.14 |