728x90

🏆 목차.

  1. 문제
  2. 코드
  3. 풀이

 

🛒 문제

 

백준-1181번-단어정렬
백준 1181번 : 단어 정렬

 

🎨 코드

 

#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

+ Recent posts