1181 단어 정렬
본문 바로가기
알고리즘 모음집/New 알고리즘

1181 단어 정렬

by KyeongMin 2020. 8. 24.
728x90
반응형

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

 

1181번: 단어 정렬

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

www.acmicpc.net

여기서는 속도 차이를 보여드리겠습니다. 우선 그전에 두가지 방식을 사용해서 문제 풀이를 하겠습니다

출력할때만 중복없이 출력하는 방법

 

#include<algorithm>
#include<vector>
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
bool cmp(const string &u, const string &v) {
	if (u.size() == v.size())return u < v;
	else return u.size() < v.size();
}
int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int N;// 단어 개수 입력	
	cin >> N;
	vector<string> s(N);//문자열 저장할 백터
	for (int i = 0; i < N; i++) {
		cin >> s[i];
	}
	sort(s.begin(), s.end(),cmp);//정렬
	for (int i = 0; i < s.size(); i++) {
		if(s[i]!=s[i+1])
			cout << s[i] <<'\n' ;//출력
	}
	return 0;
}

여기서는 이런 방식으로 하면

이렇게 결과가 나오고

unique 함수를 사용하는 방법은 

 

#include<algorithm>
#include<vector>
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
bool cmp(const string &u, const string &v) {
	if (u.size() == v.size())return u < v;
	else return u.size() < v.size();
}
int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int N;// 단어 개수 입력	
	cin >> N;
	vector<string> s(N);//문자열 저장할 백터
	for (int i = 0; i < N; i++) {
		cin >> s[i];
	}
	sort(s.begin(), s.end(),cmp);//정렬
	s.erase(unique(s.begin(), s.end()),s.end());
	for (int i = 0; i < s.size(); i++) {
			cout << s[i] <<'\n' ;//출력
	}
	return 0;
}

결과가 비슷합니다. 단 여기서 이제 원래는 

ios_base::sync_with_stdio(false);

cin.tie(NULL);

이두가지가 적어져 있으면 입출력이 빨라지는 효과가 있습니다. 위에 예제에서 빼고 적용하면 이렇습니다. 

순서대로 1번이 위에 소스 속도 2번이 다음 소스 속도 입니다. 

메모리를 더 잡아 먹은감도 있고 속도도3배가 차이 납니다. 

물론 또 이런 방식으로도 속도가 차이가 납니다. 

cout << s[i] <<'\n' ;//출력

출력 하는 부분에 <<'\n;  대신 <<endl; 이라고 하면 물론 출력 결과는 같으나 

속도 차이가 엄청 납니다. 이것은 함수에 들어가고 나오는 차이라고 생각하시면 이해가 쉬울꺼에요 

이전의  입출력을 더 빠르게 하는 소스와 비교했을때 최대 40배나 속도 차이가 나는 것입니다. 

정말 이런 사소한것이라도 알고리즘을 구현 할때 중요합니다. 알고리즘은 다 구현했는데 

출력 부분에서 저렇게 시간이 걸려서 시간초과 나면 억울 하잖아요 무튼참고해주세요.

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

17822 원판 돌리기  (0) 2020.08.25
1193 분수찾기  (0) 2020.08.24
1076 저항  (0) 2020.08.24
프로그래머스 k번째 수  (0) 2020.08.20
17142 연구소 3  (0) 2020.08.20

댓글