문제


알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

 

준비물


string - 문자열을 입력받기 위함

vector - 중복제거 기능을 사용하기 위함

sort - unique를 사용하려면 정렬을 먼저 진행해야됨

unique - 연속된 중복값을 배열의 맨 뒤로 보냄 (reruen : 보내진 중복값의 첫번째 주소)

erase - unique에서 뒤로 보내진 중복값을 제거하기 위함

코드


#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

bool compare(string a, string b){
    return a.length() == b.length() ? a < b : a.length() < b.length();
}
 
void Solution(int N){
    vector<string> strings(N);

    for(int i = 0; i < N; i++){
        cin >> strings[i];
    }

    sort(strings.begin(), strings.end(), compare);
    strings.erase(unique(strings.begin(),strings.end()),strings.end());

    for(int i = 0; i < strings.size(); i++){
        cout << strings[i] << '\n';
    }
}

int main(){
    int N;

    cin >> N;

    Solution(N);

    return 0;
}

풀이


1. strings 벡터에 문자열을 입력받는다

2. sort()와 compare()로 문제 조건에 맞게 정렬 시킨다.

3. unique()로 연속된 중복값은 뒤로 보낸다

4. erase()로 뒤로 보내진 중복값을 제거한다   

5. 출력한다

TML


sort의 기능중 비교함수를 사용할 때 알아야할 점

기본적으로 bool compare(int a, int b)인 형태의 함수를 만들어야 하는데 여기서 알아야할 점은 true면 a , false면 b  가 앞으로 정렬되는 방식이다

 

vector<stirng> strings(N)처럼 길이를 지정해둔다면 입력시 편리하다 

방법1- cin >> strings[i];

방법2- 선언하고..string temp;=>입력하고..cin >> temp;=>할당하고..strings.push_back(temp);

 

'프로그래밍 문제집 > 백준' 카테고리의 다른 글

1003번-피보나치 함수  (0) 2022.01.26
1259번-팰린드롬수  (0) 2022.01.24
1018번-체스판 다시 칠하기  (0) 2022.01.24
1157번-단어 공부  (0) 2022.01.22
2675번-문자열 반복  (0) 2022.01.21

+ Recent posts