https://www.acmicpc.net/problem/14890 모든 행과 열의 인접한 경사들을 살펴보면서 경사의 차이가 1일 때, 앞이 더 큰 경우와 뒤가 더 큰 경우가 있다. 각각의 경우에 대하여 경사가 낮은쪽으로 길이가 L인 경사로를 놓을 수 있는지 확인한다. 확인하는 과정에서 인덱스가 범위를 넘어가거나 경사가 달라지거나 이미 경사로가 있다면, 해당 행 또는 열에는 경사로를 놓을 수 없다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091..
https://www.acmicpc.net/problem/14889 팀을 절반씩 나누는 모든 경우를 만들어서 능력치의 차이를 계산해본다. 최대 20C10 = 184756 이므로 시간 내에 충분히 수행될 수 있음을 알 수 있다. 12345678910111213141516171819202122232425262728293031#include #include #include #include #define INF 987654321using namespace std; int n,a[20][20],v[20],ans=INF; void solve(){ vector start,link; for(int i=0;i
https://www.acmicpc.net/problem/14888 숫자 사이에 들어갈 수 있는 연산자의 모든 경우의 수를 넣어본다. 1234567891011121314151617181920212223242526272829303132333435363738#include #include #include #include using namespace std; int n,a[11],t,MAX=INT_MIN,MIN=INT_MAX;vector op; // 0:덧셈 1:뺄셈 2:곱셈 3:나눗셈 int main(){ scanf("%d",&n); for(int i=0;i
https://www.acmicpc.net/problem/14503 로봇 청소기의 작동 방식에 따라 적절히 재귀함수를 구현한다. 방향 전환과 상태 표시 등에 주의하자. 123456789101112131415161718192021222324252627282930313233343536#include int n,m,map[50][50],r,c,d,ans;int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; // 북동남서bool valid(int r,int c) { return r>=0 && r=0 && c
https://www.acmicpc.net/problem/14502 빈칸에 벽 3개를 세우는 모든 경우를 고려한다. 벽을 세우고 나서 BFS를 이용하여 바이러스를 확장시킨 후 남은 빈칸의 개수를 세준다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include #include #include #include using namespace std; int n,m,map[8][8],map2[8][8],ans;int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};vector e,v; // 빈칸, 바이러스 좌..
https://www.acmicpc.net/problem/14499 d 배열에 주사위 전개도의 1~6 위치의 값들을 관리하면서 시뮬레이션 해본다. 이동한 후 지도의 값이 0이면 밑면(d[6])의 수를 복사하고 아니라면 지도의 값을 밑면의 수에 복사하고 지도의 값을 0으로 바꾼다. 1234567891011121314151617181920212223242526272829303132#include int n,m,map[20][20],d[7],x,y,k,op,nx,ny;int dx[5]={0,0,0,-1,1},dy[5]={0,1,-1,0,0}; void move(int op){ int t; if(op==1) t=d[1],d[1]=d[4],d[4]=d[6],d[6]=d[3],d[3]=t; else if(op==2..
https://www.acmicpc.net/problem/13458 각각의 시험장마다 먼저 총감독관 한명을 둔다. 그래도 감시할 응시자가 있으면 부감독관을 더 둔다. 남은 응시자가 부감독관이 감시할 수 있는 응시자수로 나누어 떨어지면 몫을, 아니면 몫+1을 정답에 추가한다. 123456789101112131415161718192021#include int n,a[1000000],b,c;long long ans; int main(){ scanf("%d",&n); for(int i=0;i
https://www.acmicpc.net/problem/12100 2048 게임을 최대 5번 이동해서 만들 수 있는 가장 큰 블럭의 값을 구하는 문제이다. 일단 상하좌우 4가지 경우에 대하여 4^5=1024개의 경우를 모두 만든다. 그리고 실제로 블럭들을 이동시켜 본다. 해당 방향에 대하여 먼저 블럭들 사이에 빈칸이 없게 밀고나서 인접한 블럭의 값들이 같으면 합쳐준다. 이 때 합친 후에 블럭 사이에 빈칸이 다시 생기므로 한번 더 밀어야 한다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778..
https://www.acmicpc.net/problem/13567 시뮬레이션을 돌려본다. 실제 격자 상의 x,y와 구현 상의 x,y가 다르므로 헷갈리지 않게 주의하자. 1234567891011121314151617181920212223242526272829303132333435#include #include int n,m,x,y,d,f;int dx[4]={0,-1,0,1},dy[4]={1,0,-1,0};bool check(int x,int y) { return x>=0 && x=0 && y