티스토리 뷰

1181번: 단어 정렬 (acmicpc.net)

 

1181번: 단어 정렬

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

www.acmicpc.net


소스코드

#include<iostream>
#include<list>

using namespace std;

bool comp(string a, string b){
  // 문자열 길이로 정렬하되, 같은 길이는 알파벳 순으로 정렬한다.
  if(a.length() != b.length())
    return (a.length() < b.length());
  else return a < b;
}

int main(){
  int num;  // 반복할 횟수
  string s; // 입력받을 문자열
  list<string> ls;  // 문자열 리스트

  cin >> num;
  for(int i = 0; i < num; i++){
    cin >> s;
    ls.push_back(s);
  }
  
  //unique - > resize
  // ***정렬 후 제거해야 떨어져있는 같은 문자열이 붙어서 제거된다.***
  ls.sort(comp);
  ls.unique();
  ls.resize(ls.size());

  list<string>::iterator iter = ls.begin(); 
  for(iter = ls.begin(); iter != ls.end(); iter++){
    cout << *iter << '\n';
  }

}

풀이과정

 

1. 입력받는 문자열을 리스트로 구성한다.

2. 길이, 알파벳 순으로 리스트를 정렬 후 중복제거한다 (인접하지 않은 요소에 대해선 unique로 중복제거되지 않는다)

 

** resize는 알고리즘에선 중요하지 않았지만 unique함수를 실행한 뒤엔 resize를 해주어야 한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함