have to do_yeon

[백준 / C++] 1181. 단어 정렬 본문

C++/Baekjoon (C++)

[백준 / C++] 1181. 단어 정렬

또김또 2022. 8. 20. 18:36

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

 

 

 


 

정렬해야 한다는 말을 보고 바로 sort를 떠올렸다. 따로 함수를 만들어 sort의 세번째 인자로 넣게 되면, 세번째 인자의 조건에 따라 정렬한다고 예전에 공부한 적이 있었다. 따라서 comp() 비교함수를 만들어 세번째 인자로 넣어주었다.

참고 >> https://blog.naver.com/ndb796/221227975229

 

또한 comp() 비교함수를 만들 때 return 반환값에 대한 개념이 확립되지 않은 것 같아 추가로 공부하였다.

참고 >> https://studymake.tistory.com/115

 


제출 답안
#include <iostream>
#include <string>
#include  <algorithm>
using namespace std;

int comp(string x, string y){
    if(x.length() == y.length()){       // 길이가 같으면
        return x < y;     // 사전순 비교하기
    }
    else return x.length() < y.length();      // else, 길이 오름차순 비교
}

int main(void){
    int N;
    cin>> N;

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

    sort(str, str+N, comp);
    
   for (int i = 0; i < N; ++i){
		if (str[i] == str[i + 1]) continue;     // 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력
		cout << str[i] << '\n';
	}
}
Comments