목록Algorithm (425)
Mini

https://www.acmicpc.net/problem/16434* 풀이어려웠던점long long일때, en값을 정하는부분LLONG_MAX 를활용 or 1e18로 해도됨용사가 선빵을 때린다는점n회 공격이 필요한경우, n-1회만 맞으면됨n번째 공격에서는 몹이 죽어서 공격을 받지 않음여기서 용사가 공격받지 않는다는 사실을 추론해내야함.#includeusing namespace std; typedef long long ll;struct A { ll t,a,h;};ll n,atk;ll ret;vector v;//최대피가 x일때, 되는지bool go(ll x, ll atk) { ll tmp=x; //초기 최대피 for(int i=0;itmp) x=tmp; //최대 hp 초과 불가능 } }..

https://www.acmicpc.net/problem/1269* 풀이1set에 넣고, binary_search로 찾아서 제거 #includeusing namespace std; int t;int n,m;vector a,b;set s;int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i=0;i>tmp; a.push_back(tmp); s.insert(tmp); } for(int i=0;i>tmp; b.push_back(tmp); s.insert(tmp); } sort(b.begin(),b.end()); //정렬주의!! for(int ..

https://www.acmicpc.net/problem/6236 * 풀이1문제가 좀 난해했다. 반복인출 x통장에 남은돈을 사용할수 없음. 무조건 집어넣어야함. x원만 가능.반복인출 불가능 -> 안되는 경우 예외처리 추가go함수#includeusing namespace std; int n,m,ret;int a[100000+4];int go(int x) { // 인출할돈이 X 일때, 가능한지 //인출할돈보다 써야할돈이 크면 반드시 실패 for(int i=0;i x) { return 0; } } int cnt=1; //인출한 횟수 int remain=x; // 남은돈 for(int i=0;i>n>>m; for(int i=0;i>a[i]; } int..

https://www.acmicpc.net/problem/2343* 풀이완탐 : 이중 for문이분탐색 : 첫번째 for문을 이분탐색으로 교체 go 함수 구현이 빡센문제f(1)이 거짓이 나와야 되는 문제 발생예외처리 필요어떤 강의가 블루레이보다 긴경우, 무조건 false를 반환하도록 처리 필요.강의 중 하나라도 Blu-ray 용량보다 긴 경우, 해당 용량(x)은 적합하지 않으므로 무조건 false를 반환.en= mid-1st = mid +1음수기반 카운팅 필요양수기반은 case가 많아져서 너무 복잡// x : 빼고 남은크기int temp = x; // 블루레이의 크기 저장int cnt = 0;for(int i = 0; i 초기화 주의최대 길이 = 10000분 * 최대갯수 여야함int st=1;int en..

https://leetcode.com/problems/course-schedule/description/* 풀이선행조건을 방향 그래프로 바꿔서 표현뒤의원소의 인접리스트에 앞의 원소 추가vis의 상태를 구분해야함1: 방문중2: 방문완료vector adj[2004];int vis[2004]; // 1: 방문중, 2: 방문완료class Solution {public: int dfs(int cur){ if(vis[cur]==1) return 0; // 사이클! if(vis[cur]==2) return 1; vis[cur]=1; for(auto nxt : adj[cur]){ int res = dfs(nxt); if(re..

https://www.acmicpc.net/problem/2792* 풀이 헤맸던부분질투심이 x 일때, 학생수를 계산하는 idea그림으로 그려보자st,en을 디버깅 찍어가면서 수정 (st+en) or (st+en+1)#includeusing namespace std; int n,m;int a[300000+4];int go(int x) { int cnt=0; // 필요한 학생수 for(int i=0;i>n>>m; for(int i=0;i>a[i]; } int st=1; int en=pow(10,9); while(st

https://www.acmicpc.net/problem/17822* 틀린풀이인접한것들 지우는 idea (좌우, 상하 1개씩만 비교)반례 : 3단 인접인경우, 처리가 안됨dfs를 해야하나? * 정답풀이원형 dfs에서 next 계산방법else if 주의수정후 else if 안하면 바로 조회하기때문에 오답이됨. else if 써야함. #includeusing namespace std; int n,m,t,ret, vis[54][54];int x,d,k, found;vector v[54];const int dy[] = {-1, 0, 1, 0}; // 상, 우, 하, 좌 (y 방향)const int dx[] = {0, 1, 0, -1};void calc() { for(int i=0;i rotate(..

https://www.acmicpc.net/problem/2632* 풀이1dp로 해보려다 실패 * 풀이2원형을 선형으로 만드는 힘 (뒤에 고대로 붙이면 됨)구간쿼리는 누적합 (누적합은 1-idx로 하는게 편한듯)경우의수는 등장 횟수를 저장하라 start 의 범위 문제start [1,2,3] / 간격2 의 예시에서 막라운드는 [3,1] 이다.막라운드 일때, start index는 4다.4 = n(3) + interval(2) -1 이다. #includeusing namespace std; int n,m,target,ret;int a[2004], b[2004], pa[2004],pb[2004];map ma, mb; // int main(){ ios_base::sync_with_stdio(0); cin..