코드#include #include #include #include using namespace std;int n, m, known, kc[53], tmp, cnt, hum, res, lst[53], visited[53];vector> pe;// U-F? dfs?int find(int x) { if (x == lst[x]) return x; return lst[x] = find(lst[x]);}void merge(int x, int y) { x = find(x); y = find(y); if (x > y) lst[x] = y; else lst[y] = x;}int main() { cin >> n >> m; cin >> known; for (int i = 0; i > tmp; lst[tmp] = 0; }..
전체 글
Hello World코드#include #include #include #include using namespace std;typedef long long ll;const ll INF = 987654321;ll n, e, a, b, c, vo, vt, visited[808], res;vector> adj[808];ll dijkstra(ll s, ll e) { fill(visited, visited + 808, INF); priority_queue, vector>, greater>> pq; pq.push(make_pair(0, s)); visited[s] = 0; while(!pq.empty()) { int dist = pq.top().first; int here = pq.top().second; pq.pop(); i..
코드1 #include #include #include using namespace std;const int dx[] = { 1,-1,0,0 };const int dy[] = { 0,0,1,-1 };int n, m, a[503][503],res, visited[503][503];vector> v;// 전략 -> 완탐, 원복을 통해 값 찾기// ㅗ모양은 따로 찾아주어야 한다.void go(int x, int y, int cnt) { if (cnt == 4) { int tmp = 0; for (pair pa : v) { tmp += a[pa.first][pa.second]; } res = max(res, tmp); // ㅗ모양 찾기 int o = v[0].first; ..
코드#include #include #include using namespace std;int dp[1003][1003];string a, b;int main() { cin >> a; cin >> b; for (int i = 1; i 풀이dp배열의 정의는 문자열 a의 처음 i개의 문자와 문자열 b의 처음 j개의 문자 사이에서 최장 공통 부분 수열의 길이를 의미한다. 두 문자가 일치하는 경우 (a[i - 1] == b[j - 1])에 공통 부분 수열의 길이는 이전까지의 길이에 1을 더해준 값이 된다. 따라서 dp[i][j] = dp[i - 1][j - 1] + 1가 된다. 두 문자가 일치하지 않는 경우에는 공통 부분 수열에 포함되지 않으므로, 최장 공통 부분 수열의 길이는 이전 상태 중 최댓값을 그대로 ..
코드#include #include #include #include using namespace std;const int dx[] = { 0,0,1,-1 };const int dy[] = { 1,-1,0,0 };int n, m, a[103][103], visited[103][103], res;vector> v;vector > me;// 치즈 탐색void dfs(int x, int y) { visited[x][y] = 1; for (int i = 0; i = n || ny >= m || nx pa : v) { int x = pa.first; int y = pa.second; int tmp = 0; for (int i = 0; i = n || ny >= m || nx = 2) me.push_back..
코드#include using namespace std;int n,r,c;// 2**n칸// r행 c열 몇 번째 방문?int go(int size, int row, int col) { // 기저조건 if(size == 1) { return 0; } // 탐색 int halfSize = size / 2; int quadrantSize = halfSize * halfSize; if(row = halfSize) { return quadrantSize + go(halfSize, row, col - halfSize); } else if(row >= halfSize && col = halfSize && col >= halfSize) { ..
코드#include using namespace std;typedef long long ll;const ll INF = 987654321;ll a,b,res = INF;// 2를 곱한다// 1을 수의 가장 오른쪽에 추가한다void go(string x, ll cnt) { ll tmp = stol(x); if(tmp > b) return; if(tmp == b) { res = min(res, cnt); return; } // 2 곱한 거 go(to_string(tmp*2) ,cnt + 1); // 1더한 거 go(x + "1", cnt + 1); return;}int main() { cin >> a >> b; go(to_string(a), 0); cout 풀이문제를 해결하고 나서 태그를 확인하니까 BF..
코드#include #include #include #include using namespace std;int n, m, a[1030][1030], psum[1030][1030],x,y,x2,y2;void FASTIO() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);}int main() { FASTIO(); cin >> n >> m; for(int i = 1; i > a[i][j]; // 구간합 만들어주기, 1부터 시작해서 인덱스 에러 X psum[i][j] = psum[i][j - 1] + a[i][j]; } } for(int i = 0; i > x >> y >> x2 >> y2; int tmp = 0;..
코드#include #include #include #include using namespace std;const int INF = 987654321;int n, m, r, visited[103], itm[103],a,b,l,res;vector> adj[103];// 다익스트라// 한 점에서 이동할 수 있는 구역 거리 다 구하기// 그 후 이동 범위 안에 있으면 개수 증가, 최대값 비교int dijkstra(int x) { fill(visited, visited + 103, INF); priority_queue, vector>, greater>> pq; pq.push(make_pair(0, x)); visited[x] = 0; while(!pq.empty()) { int dist = pq.top().f..
코드#include #include #include #include using namespace std;const int dx[] = { 1,-1,0,0 };const int dy[] = { 0,0,1,-1 };int n, m, visited[603][603],res;char a[603][603];string s;pair doyeon;int main() { cin >> n >> m; for (int i = 0; i > s; for (int j = 0; j > q; visited[doyeon.first][doyeon.second] = 1; q.push(make_pair(doyeon.first, doyeon.second)); while (!q.empty()) { int px = q.front().firs..