용꿀
꼬마개발자허니
용꿀
전체 방문자
오늘
어제
  • 분류 전체보기 (247)
    • 개발 (74)
      • 스프링 입문 (7)
      • 스프링 기본 (9)
      • ToDo List using JPA (2)
      • 스프링 개념 (9)
      • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (8)
      • 스프링 MVC (3)
      • CS (18)
      • 개발 팁 (8)
      • 스프링 MSA (5)
      • 곰터뷰🐻 (5)
    • 알고리즘 (169)
      • 알고리즘 문제 풀이 (165)
    • 잡동사니 (1)
      • 노래 가사 (1)
hELLO · Designed By 정상우.
용꿀

꼬마개발자허니

(C++) 백준 1181번 - 단어 정렬
알고리즘/알고리즘 문제 풀이

(C++) 백준 1181번 - 단어 정렬

2023. 4. 10. 01:16

문제 링크 : https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

문제 풀이

sort 함수와 커스텀 비교 함수를 사용하여 단어를 정렬하여 풀이를 진행하였다.

다만 C++ vector에서의 중복 제거를 처음 사용해 보아서 조금 어려움도 있었다.

 

※ unique 함수는 중복된 값들을 뒤로 보내고, 중복된 값들의 시작 위치를 반환한다.

※ erase 함수는 시작 위치부터 종료 위치까지의 값을 모두 제거한다.

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

using namespace std;

int n;

bool cmp(string &s1, string &s2){ // 커스텀 비교 함수
    if(s1.size() != s2.size()) return s1.size() < s2.size();
    else return s1 < s2;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;
    vector<string> v(n);

    for(int i = 0; i < n; ++i) cin >> v[i]; // 입력
    sort(v.begin(), v.end(), cmp); // 정렬
    v.erase(unique(v.begin(), v.end()), v.end()); // 중복 제거
    for(string s : v) cout << s << "\n"; // 출력
}

'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글

(C++) 백준 15683번 - 감시  (0) 2023.04.18
(C++) 백준 2910번 - 빈도 정렬  (0) 2023.04.10
(C++) 백준 15657번 - N과 M (8)  (1) 2023.04.09
(C++) 백준 15656번 - N과 M (7)  (0) 2023.04.09
(C++) 백준 15655번 - N과 M (6)  (1) 2023.04.09
    '알고리즘/알고리즘 문제 풀이' 카테고리의 다른 글
    • (C++) 백준 15683번 - 감시
    • (C++) 백준 2910번 - 빈도 정렬
    • (C++) 백준 15657번 - N과 M (8)
    • (C++) 백준 15656번 - N과 M (7)
    용꿀
    용꿀

    티스토리툴바