목록Algorithm (428)
Mini

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..

https://www.acmicpc.net/problem/15685* 풀이과정시도1너무복잡.. gg * 큰돌풀이상태를 정의함각 그림을 상태(숫자)로 표현!!숫자에서 규칙찾기vector에 [방향][세대] = { 방향정보들 } 저장#includeusing namespace std; int ret;int n,x,y,d,g;vector v[4][11]; //v[방향][세대] : { ... } 방향정보들int dy[] = {0,-1,0,1}; // 오위좌아int dx[] = {1,0,-1,0};int vis[104][104];void go(int x, int y, int d, int g) { int _x = x; int _y = y; vis[y][x]=1; //시작점 체크 // 주의 : 0세대부터 ..

https://www.acmicpc.net/problem/17825* 틀린풀이그리디 (틀린풀이)먼저 완탐이 되는지 봤어야함인접리스트 사용안하고 vector 여러개로 구현하다보니 너무 복잡... gg * 정답풀이adj로 2개 연결하는것도 표현값은 v에, index는 adj에 저장 // 값과 index를 분리해서 저장하라.adj.size로 특수이동인지 판별백트래킹으로 모든 경로 확인#includeusing namespace std; const int INF = 987654321;// 게임에 필요한 전역 변수들int a[14]; // 주사위 값을 저장하는 배열int mal[4]; // 4개의 말의 현재 위치를 저장하는 배열int n = 10; // 총 주사위 던지는 횟수int v[104]; /..

* 풀이핵심 아이디어변수를 잘 정의해야함. idx 변수 : 현재까지 덮은 위치b : 필요한 널빤지 갯수 = 길이 / m + (길이%m)이 있으면 +1 없으면 + 0크게 3가지 경우로 나누기첫경우 -> pass나머지경우 -> 길이를 계산, idx 갱신#includeusing namespace std; void fastIO(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);} int n; // 웅덩이의 개수int m; // 널빤지의 길이int idx; // 현재까지 덮은 위치int ret; // 필요한 널빤지의 총 개수int b; // 현재 웅덩이를 덮는데 필요한 널빤지 개수int main(){ fa..

https://www.acmicpc.net/problem/14891* 내풀이0-idx로 만들기solve함수가 최종본시계, 반시계를 예시를 통해 해보면서 결정vv에 회전대상 {톱니번호, 방향}을 담는게 특징실수한부분 : i를 회전할게아니고 vv[i].first를 회전해야함#includeusing namespace std; vector topni[4]; //topni[0] : {1,0,1,0,1,1,1,1}vector> v; // 명령어들vector> vv; // [{회전대상톱니 idx, 방향}, ... ]int k;void goleft(int cur, int dir) { int nxt=cur-1; if(nxt=4) { return; } if(topni[nxt][6]!=t..