본문 바로가기

분류 전체보기

BOJ)5913 준규와 사과 문제: icpc.me/5913 (1,1)에서 (5,5)까지 모든 정점을 한번씩 다 들린 뒤 갈 수 있는 경로의 수를 구하는 문제이다. dfs를 이용하여 나올 수 있는 모든 경우를 탐색해주면 된다. 주의할점은 한번의 경로의 탐색이 끝난 뒤 visited를 해제해주어 다음 경로 탐색 때 그 정점을 방문할 수 있게 해주어야 한다. 1234567891011121314151617181920212223242526272829303132333435#include #include using namespace std;int a[6][6], visited[6][6], k, x, y, r;int dx[] = { 0,0,1,-1 };int dy[] = { 1,-1,0,0 };bool chk(int x, int y) { retu.. 더보기
BOJ)3109 빵집 문제: icpc.me/3109 맨 왼쪽부터 맨 오른쪽 까지 중복되지 않는 최대 경로의 개수를 구하는 문제이다. 우리는 x->y로 가는 경로가 있을 경우 무조건 오른쪽으로만 이동가능하므로 h라는 지점에서 갈 수 있는 길이없다면 다시 h를 밟아도 경로가 없다는걸 그리디하게 생각하면 알 수 있다. 이 생각에 기반하여 dfs를 이용하여 갈 수 있는 경우가 나오면 다른 방향을 탐색하지 않는 것으로 경로의 중복을 막아 답을 구해줄 수 있다. 123456789101112131415161718192021222324252627282930313233#include #include using namespace std;int r, c, visited[10002][502], res;char a[10002][502];int dx.. 더보기
BOJ)1251 단어 나누기 문제: icpc.me/1251 단어를 세 단어로 나눈 뒤 나눈단어를 전부 뒤집어 다시 붙인 단어들 중 사전순으로 가장 앞서는 단어를 출력하는 문제이다. N이 50까지 밖에 안들어오기 때문에 가능한 경우를 전부 뽑아내도 50C3 밖에 안되므로 모든 경우를 탐색하여 결과를 확인해주면 된다. 123456789101112131415161718192021222324252627282930313233343536373839#include #include #include #include #include using namespace std;vector vt;string a;void rev(string &x, int lo, int hi) { string z = x; for (int i = lo; i = a.length() .. 더보기
BOJ)14503 로봇 청소기 문제: icpc.me/14503 주어진 조건대로 로봇을 작동시킬 때 청소를 몇칸까지 할 수 있는지 판단하는 문제이다. 청소한 빈칸을 2 청소안한 빈칸을 0 벽을 1으로 설정한 뒤 시키는대로 시뮬레이션을 돌려주면 된다.12345678910111213141516171819202122232425262728293031323334353637383940414243#include #include using namespace std;int n, m, a[51][51], x, y, h, r;int dx[] = { 0,-1,0,1 };int dy[] = { -1,0,1,0 };int main() { scanf("%d%d", &n, &m); scanf("%d%d%d", &x, &y, &h); for (int i = 0; i 더보기
BOJ)14500 테트로미노 문제:icpc.me/14500 주어진 문제의 답은 모든 경우에 테트로미노를 다 대봄으로서 구할 수 있다. 주어지는 테트로미노의 5가지 모양중 ㅜ 모양을 제외한 4가지 모양은 DFS를 통하여 탐색이 가능하고 ㅜ모양만 따로 처리를 해주면 된다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#include #include using namespace std;int n, m, a[501][501], v[501][501], r;int dx[] = { 0,0,1,-1 };int dy[] = { 1,-1,0,0 };bool chk(int x, int y) { r.. 더보기
BOJ)14501 퇴사 문제: icpc.me/14501 i일 부터 일을 할 때 얻을 수 있는 급여의 최댓값으로 DP테이블을 잡으면 쉽게 계산할 수 있는 문제이다. dp[i]의 점화식은 max(dp[i+1],dp[i+t[i])+p[i]) 가 된다. 1234567891011121314151617181920#include #include #include using namespace std;int n, dp[16], t[16], p[16];int func(int pos) { if (pos == n + 1)return 0; if (pos > n + 1)return -987654321; int &ret = dp[pos]; if (ret != -1)return ret; return ret = max(func(pos + 1), func(po.. 더보기
BOJ)14502 연구소 문제: icpc.me/14502 N,M의 범위가 매우 적기 때문에 나올 수 있는 경우를 전부 확인해줄 수 있다. 6중 포문을 통하여 모든 경우에 벽을 세워본 후 dfs를 통하여 바이러스가 얼마나 퍼질 수 있는지 조사하여 그 최솟값을 전체 크기에서 벽을 제외한 값에서 빼주면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include #include #include using namespace std;int n, m, a[9][9], r, visited[9][9], b;int dx[] = { 0,0,1,-1 };int dy[] = { 1,-1,0,.. 더보기
BOJ)3079 입국심사 문제: icpc.me/3079 X시간 동안 심사할 수 있는 인원 수는 Sum(i: 0~N) X/T[i] 로 정의할 수 있다. 이를 이용하여 파라메트릭 서치로 답을 구해주면 된다. 123456789101112131415161718192021222324#include #include typedef long long ll;using namespace std;ll n, m, a[100001];int main() { scanf("%lld%lld", &n, &m); for (int i = 0; i 1; ll cnt = 0; for (int i = 0; i = m) hi = mid; else lo = mid + 1; } printf("%lld\n", lo); return 0;}cs 더보기
BOJ)2820 자동차 공장 문제: icpc.me/2820 문제를 잘 읽어보면 1번을 루트로 가지는 트리 구조를 이룬다는걸 알 수 있다. 그럼 상사 X의 부하들은 어떻게 구분할 수 있을까? 트리 구조이기 때문에 X에서 Y로 가는 경로는 오직 하나일 것이다. 이걸 이용하여 X지점에서 시작한 DFS가 끝날 때 까지 탐색되는 모든 노드들은 X의 부하라는걸 알 수 있다. 이를 이용하여 1번 노드에서부터 DFS를 돌려 정점의 번호를 새롭게 매겨준 후 DFS가 끝나는 지점(마지막 부하)의 번호까지 알게 된다면 직원에 대한 증가연산을 구간에 대한 증가 연산으로 치환시킬 수 있다, 구간에 대한 증가 연산으로 치환을 했으니 레이지 프로퍼게이션을 이용한 세그먼트 트리나 ,펜윅 트리 등을 이용하여 쿼리를 처리해주면 된다. 1234567891011121.. 더보기
BOJ)7573 고기잡이 문제: icpc.me/7573 그물의 둘레와 물고기의 수가 100으로 매우 적다 이를 이용하여 완전탐색을 해주면 된다. 한 물고기에 대해 그 물고기를 둘레에 포함하는 가능한 모든 그물을 만들어본 뒤 확인해주면 된다. 1234567891011121314151617181920212223242526272829303132333435#include #include using namespace std;int n, l, m, r;pair f[101];bool chk(int x, int y, int lx, int ly, int rx, int ry) { return lx 더보기