https://www.acmicpc.net/problem/10219 처음에는 고기를 하나 하나씩 뒤집어서 안 겹치게끔 하는 방법을 생각했는데 복잡했다. 알고 보니 고기 불판 전체를 뒤집으면 되는 간단한 문제였다. 1234567891011121314151617181920#include int main(){ int t,h,w; char s[12]; scanf("%d",&t); while(t--) { scanf("%d %d",&h,&w); while(h--) { scanf("%s",s); for(int i=w-1;i>=0;i--) printf("%c",s[i]); printf("\n"); } } return 0;}cs
https://www.acmicpc.net/problem/11502 에라토스테네스의 체로 소수를 미리 구한 후 각각의 수를 세 개의 소수의 합으로 나타낼 수 있는지 확인한다. 1234567891011121314151617181920212223242526272829303132333435363738394041#include #include using namespace std; int t,k,n,f,c[1000];vector p; int main(){ for(int i=2;i
https://www.acmicpc.net/problem/15654 1234567891011121314151617181920212223242526272829303132333435#include #include #include using namespace std; int n,m,a[8],c[10001];vector v; void go(){ if(v.size()==m) { for(auto i : v) printf("%d ",i); printf("\n"); return; } for(int i=0;i
https://www.acmicpc.net/problem/15649 백트래킹으로 순열을 만들어 보자. 12345678910111213141516171819202122232425262728293031#include #include using namespace std; int n,m,c[9];vector v; void go(){ if(v.size()==m) { for(auto i : v) printf("%d ",i); printf("\n"); return; } for(int i=1;i
https://www.acmicpc.net/problem/3067 d[i] = 주어진 동전으로 i원을 만드는 경우의 수 오름차순으로 주어진 동전의 경우의 수를 차례대로 추가해가면 중복없이 테이블을 채울 수 있다. 1234567891011121314151617181920212223#include #include int t,n,m,a[20],d[10001]; int main(){ scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i
https://www.acmicpc.net/problem/15685 드래곤 커브가 세대를 거듭할수록 이전 세대의 드래곤 커브에서 왼쪽으로 90도 회전한 것이 추가된다. 이 때 규칙을 발견할 수 있다. 처음 시작점부터의 방향을 저장해 나간다. 다음 세대의 드래곤 커브는 지금까지 저장한 방향을 역순으로 보면서 방향 전환하고 왼쪽으로 90도 회전한 방향을 추가하면 된다. 모든 드래곤 커브를 맵에 표시한 후 맵 전체를 살펴본다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include #include using namespace std; int n,x,y,d,g,s,map[105][105],ans;int ..
https://www.acmicpc.net/problem/15686 치킨집 중에서 M개를 고르는 모든 조합을 만든 후 각각의 집을 가장 가까운 치킨집에 연결시킨다. 모든 경우 중 최소값이 답이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include #include #include #include #define INF 987654321using namespace std; int n,m,t,lenh,lenc,ans=INF;vector h,c; int dist(pair a,pair b){ return abs(a.first-b.first)+abs(a.second-b.second);} int main(){..
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBJAVpqrzQDFAWr d[i][j] = 가방의 크기가 i일 때 j번째 물건까지 담을 수 있는 최대 가치 1. 가방의 크기가 i일 때 j번째 물건을 담을 수 있다면 j번째 물건을 담는 경우와 아닌 경우 중 최대값으로 채운다. d[i][j] = max(d[i][j-1],d[i-v[j]][j-1]+c[j]) 2. 가방의 크기가 i일 때 j번째 물건을 담을 수 없다면 j-1번째 물건까지 담을 수 있는 최대 가치로 채운다. d[i][j] = d[i][j-1] 1234567891011121314151617181920212223242526#include #include u..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBC1lOad9IDFAWr 수가 최대 100자리수까지 될 수 있으므로 일반적인 자료형으로는 덧셈을 할 수 없다. string으로 두 수를 받은 후 자릿수를 맞춰준 후 덧셈을 구현한다. 1234567891011121314151617181920212223242526272829#include #include #include using namespace std; int main(){ int t; scanf("%d",&t); for(int k=1;k>a>>b; int n=a.size(),m=b.size(),len=max(n,m); if(n>m) for(int i=0;..
https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWBOHEx66kIDFAWr d[i][j] = 첫번째 문자열의 i번째까지의 부분 문자열과 두번째 문자열의 j번째 부분 문자열의 최대 공통 부분 수열의 길이 편의상 d 배열의 0번째 행이나 열은 0으로 초기화해두고 (1,1)부터 채워 나간다. 1. a[i]와 b[j]가 같은 경우마지막을 제외한 각각의 문자열의 최대 공통 부분 수열의 길이에 1을 더하면 되므로 d[i][j]=d[i-1][j-1]+1이다. 2. a[i]와 b[j]가 다른 경우a의 마지막을 제외하고 b와 비교한 경우, b의 마지막을 제외하고 a와 비교한 경우 중 최대값을 d[i][j]에 넣으면 된다...