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
https://www.acmicpc.net/problem/12026 d[i] = i까지 오는데 필요한 에너지 양의 최소값 이라고 하자. 매번 0~i-1까지 검사하면서 현재 알파벳 이전에 올 수 있는 알파벳을 찾아서 최소값을 갱신한다. O(N^2)으로 해결할 수 있다. 123456789101112131415161718#include #include #define INF 987654321using namespace std; int main(){ int n,d[1005]; char s[1005]; scanf("%d %s",&n,s); fill_n(d,1005,INF); d[0]=0; for(int i=1;i