728x90
반응형
https://www.acmicpc.net/problem/1181
여기서는 속도 차이를 보여드리겠습니다. 우선 그전에 두가지 방식을 사용해서 문제 풀이를 하겠습니다
출력할때만 중복없이 출력하는 방법
#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);
이두가지가 적어져 있으면 입출력이 빨라지는 효과가 있습니다. 위에 예제에서 빼고 적용하면 이렇습니다.
순서대로 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 |
댓글