본문 바로가기

전체 글78

1764번 - 듣보잡 | 시간초과, binary search (C++) 문제 풀이 1. 처음에는 이중 for문을 이용해 풀이했다. 당연히 시간초과 발생 O(n2) ➡ 애초에 최댓값이 50만씩이여서, 50만 x 50만 = 시간 초과가 날 수 밖에 없었음.. 2. 시간초과 문제를 해결하기 위해서는, map 또는 binary search를 사용해야 한다. ➡ map: O(logn), Red-Black Tree, key - valued의 pair로 저장된다. 중복 허용 X ➡ binary search: O(logn), 꼭 정렬을 먼저 해줘야 한다. 나는 binary search를 이용해 문제를 해결했다. 추가로, vector는 데이터 순차 저장이므로 검색 속도가 느리다. 검색에는 hash_map(unordered_map)과 map을 사용하는 것이 빠르다. hash_map(unord.. 2024. 4. 3.
[백준] 10816번 : 숫자 카드 2 | binary search & unordered map (C++) 문제 풀이 binary_search를 이용해 풀이했다. O(logn) 문제를 맞춘 후, unordered_map을 이용해도 가능한 것을 확인해 사용해보았다. O(1) 이 문제를 풀며 놀라웠던 점은 시간복잡도가 O(logn)인 binary_search가 O(1)인 unordered_map보다 빨랐다는 것이다. 찾아보니 이에 대한 질문 글이 있어 답변을 가져왔다. 현실 세계에서는 N이 무한히 큰 경우가 거의 없기 때문에 O(lgN)과 O(1) 정도의 차이는 N의 크기에 따라 시간복잡도에 붙은 상수로 자주 뒤집어집니다. 가령, 최소한의 비교로 원하는 수를 찾아야 하는 가상의 문제가 있다고 합시다. N에 관계없이 항상 50번의 비교로 수를 찾는 어떤 O(1) 알고리즘과 N에 대해 ceil(lgN)번의 비교를 하.. 2024. 4. 1.
[백준] 1920번 : 수 찾기 | binary search (C++) 문제 풀이 C++ 내 내장되어 있는 binary_search( ) 함수를 이용해 풀이했다. 시간복잡도는 O(logn)으로 빠른 속도로 계산할 수 있다. 입력받는 정수의 범위가 2의 31승까지 이므로 long long으로 선언한다. int n, m; long long listnum, findnum; cin >> n; vector을 이용해 입력받은 값을 저장한다. vector listv; for (int i = 0; i > listnum; listv.push_back(listnum); } binary search는 가운데에 있는 값(중간 크기의 값)을 기준으로 정렬하기 때문에, 꼭 오름차순 혹은 내림차순으로 정렬해야 한다. 따라서, sort() 함수를 이용해 정렬한 후 bian.. 2024. 4. 1.
[백준] C++로 풀이 시 시간 초과가 난다면? 추가하자! ios_base::sync_with_stdio(false); cin.tie(0); 2024. 3. 28.
[백준] 1431번 : 시리얼 번호 | vector 구조체 (C++) 문제 풀이 '구조체를 이용한 벡터'로 풀이했다. 비슷한 정렬 문제 풀이를 아래에 첨부한다. 아래는 vector에 구조체를 넣어 같은 방식으로 풀이한 정렬 문제이다. [백준] 10825번 : 국영수 (C++) 문제 풀이 vector에 구조체를 넣어 풀이했다. 아래는 array에 구조체를 넣어 풀이한 문제이다. 또한, vector을 이용한 sort 함수와 사용자 지정 compare을 자세히 설명해놓았으니 이 부분이 어렵다면 읽 jigoo-log.tistory.com array에 구조체를 넣어 풀이한 정렬 문제이다. 또한, vector을 이용한 sort 함수와 사용자 지정 compare을 자세히 설명해놓았으니 이 부분이 어렵다면 읽어보는걸 추천한다! 👍👍 [백준] 11650번 : 좌표 정렬하기 | Sort 함.. 2024. 3. 18.
[백준] 11656번 : 접미사 배열 | string.substr() 함수를 이용한 '부분 문자열 추출' (C++) 문제 풀이 string.substr() 함수를 이용하여 부분적으로 문자열을 추출했다. 아래는 substr() 함수에 대한 설명이다. #include //substr() 함수를 사용하기 위한 헤더 파일 string str = "CandyShop"; // str.substr(첫 번째 문자의 위치, 추출할 문자열의 길이); str.substr();// CandyShop | 인수가 없으면, 문자열 그대로 반환 str.substr(1);// andyShop | 시작 인수만 있다면, 해당 인덱스부터 마지막까지 str.substr(2);// ndyShop str.substr(3);// dyShop str.substr(4, 3); // ySh string 형식의 vector을 선언하고, substr() 함수를 이용해 .. 2024. 3. 14.
[백준] 10825번 : 국영수 (C++) 문제 풀이 vector에 구조체를 넣어 풀이했다. 아래는 array에 구조체를 넣어 풀이한 문제이다. 또한, vector을 이용한 sort 함수와 사용자 지정 compare을 자세히 설명해놓았으니 이 부분이 어렵다면 읽어보시는걸 추천한다! 👍👍 [백준] 11650번 : 좌표 정렬하기 | Sort 함수와 Compare & Array와 Vector 풀이 (C++) 문제 풀이 '이차원 벡터'와 '이차원 배열'로 풀이했다. 총 세 가지의 풀이로 문제를 해결했다! [ '이차원 벡터' 풀이 ] 1. 이차원 벡터 선언 vector v; // 이차원 벡터 선언 2. 이차원 벡터 요소 입력 for jigoo-log.tistory.com 1. vector를 선언하기 위한 구조체(struct) 생성 struct score .. 2024. 3. 14.
[백준] 11650번 : 좌표 정렬하기 | Sort 함수와 Compare & Array와 Vector 풀이 (C++) 문제 풀이 '이차원 벡터'와 '구조체를 이용한 배열'로 풀이했다. 총 세 가지의 풀이로 문제를 해결했다! [ '이차원 벡터' 풀이 ] 1. 이차원 벡터 선언 vector v; // 이차원 벡터 선언 2. 이차원 벡터 요소 입력 for (int i = 0; i > x >> y; // 첫 번째 - 이차원 벡터 입력 방법 v.push_back({x, y}); // 두 번째 - 이차원 벡터 입력 방법 v.push_back(make_pair(x, y)); } 3. 오름차순 정렬 // 사용자 지정 compare 생략 - 오름차순 정렬이기 때문에 가능 sort(v.begin(), v.end()); // 오름차순 sort(v.begin(), v.end(), less()); // 오름차순 /.. 2024. 3. 14.
[백준] 11931번 : 수 정렬하기 4 (C++) 문제 풀이 sort함수를 사용할 때, greater 내림차순 less 오름차순 잊지말도록! #include // sort함수를 사용하기 위한 헤더 파일 sort(v.begin(), v.end(), compare); sort(v.begin(), v.end(), greater()); // 내림차순 sort(v.begin(), v.end(), less()); // 오름차순 아래는 정렬 시 시간복잡도에 대해서 자세하게 적어두었다. 이 문제에 대한 코드 설명도 있으니 꼭 읽어보시기를 추천드린다! 👍👍 아래의 글을 두 줄 요약하자면, sort함수는 퀵정렬을 이용해서 시간복잡도가 O(nlogn)으로 더 효율적이고 빠르다. 만약, 이중 for문을 이용해 정렬을 구현하면 시간복잡도는 O(n2) 으로 상대적으로 느리고, .. 2024. 3. 13.
반응형