목록Algorithm (187)
:: ADVANCE ::
[STL] 알고리즘 find 알고리즘은 순방향 반복자를 요구vector v;vector::iterator iter;iter = find(v.begin(), v.end(), 20); // v [begin, end) 중에서 원소 20을 찾아 그에 해당하는 반복자를 반환 sort 순차열을 정렬하는 알고리즘임의 접근 반복자를 요구한다. (vector, deque) sort(정렬을 원하는 시작점, 끝점(끝 원소 다음), 정책); vector v;sort(v.begin(), v.end()); int arr[n];sort(arr, arr + n); 함수 객체STL 알고리즘은 함수 객체, 함수, 함수 포인터 등의 함수류를 인자로 받아 알고리즘을 유연하게 동작시킨다.따라서, STL에서 함수 객체는 클라이언트가 정의한 동..
[STL] STL Standard Template Library프로그램에 필요한 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리.자료구조와 알고리즘은 서로 반복자라는 구성 요소를 통해 연결한다. STL의 구성 요소* 컨테이너 (Container) : 객체를 저장하는 객체로 컬렉션 혹은 자료구조라도 한다.* 반복자 (Iterator) : 포인터와 비슷한 개념으로 컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키게 하는 기능을 한다.* 알고리즘 (Algorithm) : 정렬, 삭제, 검색, 연산 등을 해결하는 일반화된 방법을 제공하는 함수 템플릿이다.* 함수 객체 (Function Object) : 함수처럼 동작하는 객체로 operator() 연산자를 오버로딩한 객체이다. 컨테이너..
BAEKJOON ONLINE JUDGE 2110 공유기 설치 https://www.acmicpc.net/problem/2110 12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include #include using namespace std; int home[200000]; int main(){ int n, c; int start = 1, end, cnt, middle, ans; int h; int i; scanf("%d %d", &n, &c); for (i = 0; i
BAEKJOON ONLINE JUDGE 2805 나무 자르기 https://www.acmicpc.net/problem/2805 H 높이를 찾는 이진 탐색을 하면 된다. H 값을 기준으로 잘린 나무의 합이 필요한 값보다 크면 더 큰 H를 찾아야 하고, 잘린 나무의 길이 합이 M보다 작으면 H는 더 낮아야 한다. 여기서, 문제의 특성을 잘 살펴보면 H 값이 변하면 잘린 나무의 값은 무조건 변하게 된다.따라서, 잘린 나무의 길이의 합이 M과 같으면 그 H값이 바로 최대값이다.하지만 여기서 잘린 나무의 길이 합이 딱 M과 같지 않을 수도 있기 때문에그럴 경우에는 합이 M보다 큰 마지막 경우의 end 값을 출력해 주어야 한다. (end를 출력하는 이유는 조건을 만족하는 마지막 middle에서 + 1을 한 값이 s..
BAEKJOON ONLINE JUDGE 1654 랜선 자르기 https://www.acmicpc.net/problem/1654 N개로 만들 수 있는 최대 랜선의 길이를 찾는 이진 탐색 문제 하나의 값을 가지고 N개 이상 만들 수 있으면 그 길이를 max와 비교, max를 갱신 한 후 길이를 늘려서 다시 탐색N개 보다 적게 만들면 길이를 줄여서 다시 탐색 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include int k, n;int line[10000];int max; void bsearch(long long int start, long long int end){ long long int mid..
BAEKJOON ONLINE JUDGE 2457 공주님의 정원 https://www.acmicpc.net/problem/2457 구현 문제 3월 1일부터 11월 30일까지 정원에 꽃이 비지 않으면서 최소한의 꽃을 선택을 하려면 특정 꽃이 지기 전에 피면서 가장 오래 피어있을 꽃을 선택하여 줄줄이 이어 선택해 나가 12월 1일 이후에 지는 꽃을 마지막으로 선택하면 된다. 꽃을 시작점을 중심으로 정렬하여 지는 날이 가장 긴 꽃을 찾아 선택하여도 되고, 정렬없이 입력 배열을 탐색하면서 꽃을 찾아도 된다. 처음 구현한 코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575..
BAEKJOON ONLINE JUDGE 2146 다리 만들기 https://www.acmicpc.net/problem/2146 풀이 1. DFS & BFS DFS 또는 BFS로 섬들을 잇고 BFS로 섬 주위로 다리를 지어 섬들을 연결하면 된다.섬마다 한칸씩 다리를 지어 만나도록 연결하였다. 0ms 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113..
BAEKJOON ONLINE JUDGE 2343 기타 레슨 https://www.acmicpc.net/problem/2343 정답을 찾아가는 이진 탐색 문제이다. 레슨의 길이를 기준으로 블루레이를 만들었을 때 만들 수 있는 블루레이의 개수가 M과 같거나 큰 경우다시 레슨의 길이를 더 크게 하여 가능 여부를 찾는다.레슨의 길이가 너무 큰 경우 블루레이의 개수가 M보다 작은 값이 나온다. 그 경우 다시 레슨의 길이를 줄여 탐색한다. 이런 식으로 이진 탐색 가능 여부를 만들어 탐색을 하여M을 만들 수 있는 가장 작은 레슨의 길이를 찾는다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950#incl..
BAEKJOON ONLINE JUDGE 2531 회전 초밥 https://www.acmicpc.net/problem/2531 연속해서 먹을 수 있는 접시가 k 개 이기 때문에 회전(순환)의 경우 배열을 추가로 k개 더 선언하여 뒤에 더 입력하였다. dp로 문제를 풀었다. dp[마지막으로 먹은 초밥의 index] = index의 초밥을 마지막으로 먹었을 경우 최대로 먹은 초밥의 가짓 수 k개 안에 중복되는 초밥번호가 있을 경우 더이상 수를 세면 안되기 때문에 이를 처리해야 한다.초밥의 접시 여부를 판단하는 배열을 선언하여 i 번째 초밥을 추가하면 i - k의 초밥을 빼 준다. 또한 연속으로 초밥을 먹으면서 쿠폰 번호와 동일한 초밥을 먹을 수 있으므로 이를 판단하여야 한다.dp를 채워나갈 때 같이 계산을 하..
BAEKJOON ONLINE JUDGE 7579 앱 https://www.acmicpc.net/problem/7579 DP! 최소의 비용문제의 핵심은 입력 메모리 값을 적절히 조합하여 합이 필요한 메모리 M 이상을 만드는데, 그 중 cost가 가장 작은 값을 출력하는 것이다.단순히 완전히 탐색을 하여 메모리 조합을 찾는 경우에는 당연히 Time Limit가 발생한다.따라서 DP로 문제를 풀어야 하는데처음에는 dp[메모리] = cost(최소값) 로 생각을 하여dp의 index(memory)가 입력 기준을 처음으로 넘는 cost를 출력하려 하였으나 메모리 범위가 넓어 배열을 잡을 수 없다. ---> 반대로!!index와 값을 반대로 하여 보자dp[cost] = memory(최대값) 입력 메모리와 cost를 ..