IT/정보올림피아드,문제해결
x좌표 기준으로 정렬합니다. dp[4] = (4를 위한 cost) + (1~3의 최적Cost) dp[4] = min(dp[4] , (3~4 Cost) + (1~2의 최적Cost) ) dp[4] = min(dp[4] , (2~4 Cost) + (1을 위한 Cost) ) dp[4] = min(dp[4] , (1~4 Cost) ) 구간의 cost를 구하는 방법 Max(A~B사이의 X축거리 , A~B사이의 모든 건물 중 Y절대값이 가장 큰 값 * 2) #include #include #include long long d[10005]; typedef struct point { long long x, y; }Point; struct point pointList[10000]; int comp(const void* p..
분류 : 큐, 시뮬레이션 초밥의 회전을 나머지연산을 이용하여 인덱싱을 간편하게 할 수 있습니다. 초기세팅 1. 0부터 k개의 초밥번호를 Q에 넣는다 (7,9,7,30) 2. 하나씩 넣으면서 (초밥종류배열[초밥[i]]==0) 이라면 cnt++ 한다. 3. 초밥종류배열[초밥[i]]++ 한다. 4. Max = cnt; 5. (초밥종류배열[쿠폰초밥] == 0) 이라면 max +1 한다 6. end = k-1 N번 반복 1. Dequeue한다(U). 초밥종류배열[U]-- 한다. 2. 초밥종류배열[U]==0 이라면 cnt--한다. 3. end = (end+1)%N //이부분이 중요 회전초밥 이므로 끝이라면 다시 앞으로 가야함. 4. 초밥종류배열[초밥[end]]==0 이라면 cnt++한다. 5. 초밥종류배열[초밥[e..
안녕하세요 오늘은 퀵소트에 대해 학습해보겠습니다. C언어에서 퀵소트는 라이브러리로 제공되기때문에 이용하여 정렬을 빠른 시간에 할 수 있습니다. 하지만 라이브러리의 제약이 있다면 직접 구현해야 하는경우도 발생합니다. 그리고 퀵소트를 사용하기전에 어떤 원리로 작동하는지 알면 좋겠죠? 퀵소트의 특징은 아래와 같습니다. 주어진 배열을 적당히 크기별로 분리 후 분할하고 이것을 재귀적으로 반복한다. 최악 평균 번의 비교를 수행한다. void quickSort(int data[], int l, int r) { int left = l; int right = r; int pivot = data[(l + r) / 2]; while (left pivot) right--; if (left left) { quickSort(da..
분류 : 다이나믹프로그래밍 이 문제는 냅색의 기본이론과 다른 방식으로 테이블을 작성해야 합니다. 냅색의 기본이론은 가로축이 책가방의 크기(사용할 수 있는 전체 크기) 입니다. 그리고 테이블 속의 데이터는 취할 수 있는 이득입니다. 하지만 이문제에서 비용의 범위가 10,000,000이며 개수가 100개이므로 최대 10억 개의 데이터를 채워야 합니다. 시간복잡도와 공간복잡도를 고려한 접근이 필요합니다. 냅색은 가로축이 크기이고 내용이 얻는 비용입니다. 이것을 역으로 생각해서 가로축을 비용, 내용을 크기로 해봅시다. 그럼 어떤 비용에서 최대 크기를 구할 수 있습니다. 5 60 30 10 20 35 40 3 0 3 5 4 Input이 위와 같을 때 그럼 위와 같이 표를 채울 수 있습니다. 가장 아래쪽 라인에서 ..