본문 바로가기

Algorithm/정렬5

[프로그래머스] 가장 큰 수 c++ 가장 처음 생각해낸 방법은 모든 경우의 수를 나열하고, 그 중 큰 수를 찾는 방법이었다. STL의 next_permutation을 이용해서 모든 순열을 만들어서 비교했다. 하지만 이 경우는 next_permutation메서드의 시간복잡도O(N)과 내부 for문에 걸리는 시간때문에 시간초과가 발생한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include #include #include using namespace std; string solution(vector numbers) { sort(numbers.begin(),numbers.end()); int max_number = 0; do{ string tmp; for(int .. 2022. 9. 29.
[백준] 2512 예산 이진탐색문제이다. 요청된 예산을 벡터에넣어 정렬한 후, (1~벡터원소중 가장 큰 값)의 범위에서 이진탐색을 진행한다. 예산범위 내에서 최대 상한선을 구한다? -> 이진탐색을 끝마쳤을 때 high값이 최대가 된다. Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 #include #include #include using namespace std; int n, budget; vector v; int main() { cin >> n; v.resize(n); for (int i = 0; i > v[i]; cin >> budget; sort.. 2022. 4. 23.
[백준] 18870 좌표압축 계속 이진탐색을 활용한 정렬문제를 풀다보니 저절로 이진탐색이 떠올랐다.. 해당 원소가 나머지 원소들과 비교했을 때 몇번째로 크냐?? 를 묻는 문제이므로, vector를 정렬한 후에 저장된 원소를 하나씩 꺼내면서 이진탐색을 진행한다. 단, v에서 중복원소를 지워야해서 좀 까다로웠다. 처음 set을 사용했다가 std::set은 배열과같이 indexing이 안되므로 복잡해질거같아서 vector의 erase함수를 이용하기로 했다. v.erase(unique(v.begin(),v.end()),v.end()); 먼저 unique(v.begin(),v.end())는 가령 [3,3,4,1,5,5]배열이 있을 때 [3,4,1,5,5,5]로 만들어준다. 즉, unique 함수를 적용하면 위와 같이 중복된 원소를 제거하며 .. 2022. 4. 20.
[백준] 1764 듣보잡 백준 10815번 문제의 문자열버전이다. 풀이가 비슷하므로 아래 문제풀이를 참고해도 될거같다. https://everydayyy.tistory.com/44 [백준] 10815 숫자카드 이중 for문을 사용할 시 500000*500000의 엄청난 크기가 나와서 이진탐색으로 풀어야 한다. 간단한 이진탐색이기 때문에 큰 어려움은 없었지만 까먹어서 구현하는데 오래걸렸다,, *********까먹지 않기 everydayyy.tistory.com 이진탐색으로 해당문자열이 있는지 탐색하고, 있다면 answer 벡터에 저장해서, 마지막에 정렬하여 출력하면 끝!! 숫자에 이어서 영문자열의 경우 또한 STL의 std::sort()함수로 처리가 가능하다는 것을 보여준 문제같다. void sort(T start, T end, .. 2022. 4. 19.
[백준] 10815 숫자카드 이중 for문을 사용할 시 500000*500000의 엄청난 크기가 나와서 이진탐색으로 풀어야 한다. 간단한 이진탐색이기 때문에 큰 어려움은 없었지만 까먹어서 구현하는데 오래걸렸다,, *********까먹지 않기 위해 개인적으로 정리할 예정!!!***********8 이외에도 시간초과가 계속 뜨는 바람에 계속 수정을 했다.. 수정한내용은 다음과 같다. 1. 입/출력에 시간을 많이 잡아먹어서 ios::sync_with_stdio(false); cin.tie(0); 추가 2. 기존에 쓰던 벡터에서 일반배열로 수정 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40.. 2022. 4. 19.