본문 바로가기

반응형

개발자/Algorithm

c++ STL 함수 remove, remove_if 에 정의됨 안녕하세요. 오늘은 헤더의 std::remove_if() 함수에 대해 알아보겠습니다. template ForwardIterator remove(ForwardIterator first, ForwardIterator last, const T& val); template ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p ); 범위 내에 특정 값을 가진 원소들을 제거한다. 범위 (first 부터 last 전 까지) 내에 원소들 중에서 val 과 값이 일치하는 원소(remove)들 혹은 조건 p 를 만족하는 원소(remove_if)를 제거한 범위로 변환합.. 더보기
프로그래머스 문제풀이(정렬)- K번째수 vector 관련 메서드, iterator 들만 잘 사용하면 되는 문제. #include #include #include #include using namespace std; vector solution(vector array, vector commands) { vector answer; vector temp_array; vector::iterator iter; vector::iterator iter2; int solu; int command_num; int i,j,k; int arraysize = array.size(); command_num = commands.size(); for(int t=0;t 더보기
Greedy 알고리즘 그리디 알고리즘(욕심쟁이 알고리즘, Greedy Algorithm)이란 "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자" 라는 모토를 가지는 알고리즘 설계 기법이다. 그리디 알고리즘의 대표적 예제는 거스름 돈 문제입니다. 우리가 흔히 거스름 돈을 줄 때 가장 적은 양의 화폐를 주는 것이 제일 편합니다. 예를들어 560원을 걸러주어야 할 때 10원 짜리 56개를 주는 것 보다 500원 짜리 1개, 50원짜리 1개, 10원 짜리 1개를 주는 것이 총 3개로 더 편합니다. 따라서 이런 경우 '무조건 더 큰 화폐단위부터 거슬러 준다'는 알고리즘만 지키면 최적의 해를 보장 할 수 있습니다. 이러한 그리디 알고리즘은 기본적으로 무조건 큰 경우, 무조건 작은 경우, 무조건 긴 경우, 무.. 더보기
DP 동적 프로그래밍 설명 + 예제(타일링 문제) 하나의 문제를 한번만 풀도록하는 알고리즘 동적 프로그래밍은 다음의 가정 하에 사용가능합니다. 1번가정 -> 큰 문제를 작은 문제로 나눌 수 있다. 2번가정 -> 작은 문제에서 구한 정답은 그것을 포함하는 큰 문제에서도 동일하다 즉, 쉽ㄱ ㅔ말해 크고 어려운 문제가 있으면 그것을 잘게 나누어 해결한 후에 나중에 전체답을 구하는것 But!! Memoization 이 사용된다는 점이 분할정복(Divide and Conquer 방법)과는 다릅니다. 이미 계산된 결과는 배열에 저장함으로써 나중에 동일한 계산을 해야할 때는 저장된 값을 단순히 반환만 하면됨 #include int d(int x){ if(x==1) return 1; if(x==2) return 1; return d(x-1) + d(x-2); } in.. 더보기