Algorithm_C++/Greedy Algorithm 11

백준 1461 : 도서관

진짜 뇌정진건지.. 56분 걸렸다. 테스트 케이스 이해하는데만 한세월 걸린 것 같다. 가장 거리 긴 것 부터 M개는 한번만 더하고, 나머지는 두번씩 더한다. 양수 영역 따로, 음수 영역 따로 계산해야하는데 어차피 0에 도착하면 리필되기 때문이다.#include #include#include #includeusing namespace std;long long N,M, book;//1 books;//-1 0 3 4 5 6 11//1+1+3+3+5+5+11 = 8 10 11//가장 거리 긴거부터 -M//56분long long dist;int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N >> M; books..

백준 1339 : 단어 수학

오늘 잠을 별로 안자서 그런지, 문제가 하나도 안풀린다. 오늘 못 푼건 블로그에 올리지 않았다. 너무 많이 못풀어서 다 답보고 하는 느낌이라 한 세개정도만 올렸다. 내일이 코텐데 미치겠다. 이것도 풀긴했는데 거의 시간초과 날뻔해서 풀이 참고해서 다시 풀었다. '가중치'라는 테마를 생각하면 pq를 항상 생각하자. 첫 풀이와 두번째 풀이다.#include #include#include #include#include#includeusing namespace std;int N, max_res = 0;//1 m ;vector v;vector v2;//완전탐색 10!int to_num(string s) { int res = 0; for(int i = 0; i > N; for(int i = 0; i ..

2022 KAKAO BLIND RECRUITMENT : 두 큐 합 같게 만들기

else if가 아니라 if 써서 두번걸렸다. 그리고 최대 횟수가 2*n이 아니라 2*n+1인 것을 생각하지 못했다.최대 횟수에 관한 말이 많던데 솔직히 잘 모르겠다. 시계방향으로 queue 두개를 붙여 전개했을 때 최대 이동 횟수가 (2n-2)+(n-1) = 3n-3이 맞는거 같긴하다..그래도 그리디인건 바로 알아챘다.#include #include #include#include#include#includeusing namespace std;//pop과 insert 합쳐서 작업 1회//합을 동일하게 만들어야함, 이 작업의 최소 횟수, 불가능한 경우 -1//큐의 길이 queue1, vector queue2) { int answer = 0; int s = 3*queue1.size()-3;//왜 ..

2023 KAKAO BLIND RECRUITMENT : 택배 배달과 수거하기

1시간 걸렸다. 다른 사람의 풀이를 보니 누적합으로 아주 쉽게 풀어서 살짝 자괴감들었다. 시간복잡도는 50(최대 적재)*10만(거치는 곳) 정도로 계산했다.#include #include #include#includeusing namespace std;//배달을 좌로 갈때 하거나, 수거를 우로 갈때 할 필요 x//배달은 우로 갈때, 끝 기준 개수부터 최대로 채워놓기//수거는 좌로 갈때, 끝에서 부터 최대로 채우기long long solution(int cap, int n, vector deliveries, vector pickups) { long long answer = 0; int temp = cap; int md=-1,mp=-1, len; for(int i = n-1; i >= ..

백준 1092 : 배

쉬운 문제였는데(10분만에 코드 짬)로직을 잘못 생각해서 결국 지피티를 참고했다. 아쉽다..erase는 인덱스 만큼 삭제, remove는 value를 삭제(실제 삭제 x)#include #include#include#include#include#includeusing namespace std;int N,M,c;vectorcrain;vector box;//박스의 max가 크레인의 max 중량보다 크면 -1 출력//박스랑 크레인 각각 정렬하고 그리디로int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N; for(int i = 0; i > c; crain.push_back(c); ..

백준 1083 : 소트

항상 풀고나면 간단해 보이는데 풀 땐 오래걸린다. 이유가 로직을 한번에 완벽하게 짜고 코드를 짜는게 아니라 코드를 짜면서 로직을 수정하고, 그 수정된 로직으로 다시 코드를 짜고 해서 그런 것 같다. 앞으론 한번에 로직을 완벽히 짜는 연습을 해보자..#include #include #include using namespace std;int N,num, max_idx, temp;vector arr;int S;//가장 뒷서는 것 - 내림차순에 가깝게 만들어야//S번 이내에 내림차순 가능하면 내림차순 출력//S가 N-1+N-2+..+1 = N*(N-1)/2보다 크거나 같으면 무조건 내림차순 출력 (버블정렬)//max값과 처음의 인덱스 차이가 S보다 작으면 max를 제일 앞으로//처음에 max값 고정시키고.. 이..

백준 13305 : 주유소

숫자 단위좀 똑바로 읽어야겠다 ㅋㅋ#include#include#include#include#include#include#include#includeusing namespace std;int N;long long roads[100001];long long liters[100001];long long min_sum = 0;long long min_liter = 1000000001;//해당 구간 까지 중 최소인 도시에서 리터를 풀충 해야..int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> N; for(int i = 1; i > roads[i]; } for(int i = 1; i > lit..

백준 1541 : 잃어버린 괄호

이런 문자열 문제가 참 내가 취약한 거 같다. 만약 이렇게 쉽게 나오지 않았다면 바로 못풀지않았을까..#include#include#include#include#include#include#include#includeusing namespace std;string s;int num = 0, min_sum = 0;bool is_minus = false;//식에는 +,-, 수만 존재//최소로 만드려면 괄호로 뺄셈을 최대로 만들어야함.//괄호 개수 제한x -> -나오면 (, - 또 나오면 그 앞에 )//그리디라는 걸 몰랐다면 어떻게 풀었을까.. dp를 시도해봤을 거 같기도 하다int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)..