본문 바로가기

Algorithm/유용한 팁 (Tips)5

vector, unordered_map 전체 순회 알고리즘 속도 비교 vector는 배열을, unordered_map은 hash_table를 사용해 hash를 구현한 모두 유명한 자료구조 컨테이너이다. unordered_map의 탐색 시간 복잡도는 O(1)이다. 그렇다면 전체 순회의 경우 vector와 비교할 때는 어떻게 될까? 단순히 시간복잡도만을 계산하면 둘 다 O(n)인데 어떤 것이 더 빠를까? 직접 해보자 #include #include #include #include #define COUNTER 1000000 int main() { using namespace std::chrono; // std::chrono::milliseconds is an instatiation of std::chrono::duration: int tmp; std::vector v; std:.. 2020. 5. 3.
[C++,구현] 백준 1764번 듣보잡 문제풀이, 배열,vector,map 속도비교 문제링크 백준 1764번 듣보잡 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 영어 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다. www.acmicpc.net 간단한 문제열 처리문제를 가지고 흔히 알고리즘에서 사용하는 단순 배열, STL vector, STL map을 써서 다양한 방법으로 문제를 풀어보고 속도차이를 비교해보려 한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include #in.. 2019. 3. 26.
[C,C++] 지역변수와 전역변수 특징,백준 1463번 1로 만들기 풀이 문제 링크 백준 1463번 1로 만들기 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 1로 만들기는 지난번에 풀이한 적이 있지만 한번 복습하는겸 다시 풀기로 했다. C언어 문법으로 갈아타고 여기저기 주운 지식을 이용해 다시 코드를 작성하니 확실히 깔끔해졌다. 또한 유명코더분들이 배열을 만들때 전역변수로 만드는 경우가 많았는데 오늘 이문제를 다시 풀어보며 차이점을 포스팅하기로 했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 #include int n,dp[1000001]; int main(){ scanf("%d",&n); for(int i=0;idp[i/3]+1?dp[i]=dp[i/3]+1:dp[i]; dp[i.. 2019. 3. 11.
[C,C++] 1,2차원 배열 원소 선언, 정적 동적 전체 초기화 문제를 풀다 C와 C++의 1,2차원 배열 선언 초기화가 동적,정적에 따라서도 완전달라 포스팅을 해보려 한다. C 1차원 배열 정적,동적 초기화 C 2차원 배열 정적,동적 초기화 C++ 1차원 배열 정적,동적 초기화 C++ 2차원 배열 정적,동적 초기화 순으로 진행된다. 먼저 C 1차원 배열 정적 초기화의 경우 일반적인 배열 초기화는 다들 알걸로 생각한다. 1 2 3 4 5 6 7 //int형의 5개 배열을 초기화 int arr[5]={5,9,3,4,2}; //개수를 생략해도 무방하다. int arr[]={5,9,3,4,2}; cs 1 int arr[5]={6,} cs 이렇게 하면 모두 6으로 초기화 된다는 포스팅이 많은데 그렇지 않다. 6 0 0 0 0이렇게 될뿐이다. 한번에 초기화하는 법은 찾아서 업.. 2018. 8. 23.
[C++] 입출력 속도 가속시키기 백준 2741번 N찍기 풀이 std::ios_base::sync_with_stdio(0) 알고리즘을 공부하다 사람들이 std::ios_base::sync_with_stdio(0);를 간간히 사용하는 것을 보았다. 왜 그런지 궁금하여 찾아보니 C++에서 흔하게 사용되는 입력 방법은 cin인데 이 cin이 다른 입력방법 (scanf, get)에 비해 상대적으로 느리다는 것이다. 알고스팟에 올라온 자료를 첨부한다. 출처 : https://algospot.com/forum/read/2496/ 위의 자료에 따르면 std::cin은 scanf보다 거의 3배가까이 느린것으로 나온다. 이유는 cpp의 iostream의 buffer와 c의 stdio buffer와 동기화 시켜주므로 2개의 버퍼사용으로 속도가 저하된다는 것이다. 하지만 std::ios_base::sync_with_stdio(false);를 사.. 2018. 8. 6.