알고리즘(139)
-
순열 알고리즘 (Permutation)
1234567891011121314151617181920212223242526272829303132#include using namespace std; #define swap(a,b,tmp) tmp=a; a=b; b=tmp; int n,num[1001],tmp; void perm(int* num, int start, int end) { if (start == end) { for (int i = 0; i
2017.07.18 -
[백준 10844번] 쉬운 계단 수
풀이DP로 풀면 풀수있는 문제 일일이 경우의수를 써보면 규칙이있다. 1일때 1 1 1 1 1 1 1 1 12일때 2 2 2 2 2 2 2 2 13일때 2 4 4 4 4 4 4 3 2 소스코드123456789101112131415161718192021222324252627282930313233#include using namespace std; int main() { int n, num[11], copy[11]; long long sum=0; cin >> n; num[10] = 0; for (int i = 0; i
2017.07.13 -
[백준 1261번] 알고스팟
풀이BFS 해결가능하리라 보았지만 조금의 트릭이 있다. 벽을 만났을 경우 큐의 맨끝에 삽입하고 길을 만났을 경우에는 큐의 맨앞에 삽입해주어 길을 만나는 경우에 우선순위를 먼저 두어야한다. 오른쪽으로 한칸가서 벽이면 큐의 맨끝에 삽입 길이면 큐의 맨앞에 삽입 왼쪽으로 한칸가서 벽이면 큐의 맨끝에 삽입 길이면 큐의 맨앞에 삽입 위쪽으로 한칸가서 벽이면 큐의 맨끝에 삽입 길이면 큐의 맨앞에 삽입 아래쪽으로 한칸가서 벽이면 큐의 맨끝에 삽입 길이면 큐의 맨앞에 삽입 이순서대로 풀어야 우선순위에 맞게 길을찾는다. 벽을 최소한으로 부숴야하기때문에 길이 있다면 길로 먼저 갈수있도록 해주어야한다. 소스코드1234567891011121314151617181920212223242526272829303132333435363..
2017.07.13 -
[백준 2580번] 스도쿠
풀이백트래킹이란 모든 경우의수를 모두 탐색하는 것을 뜻한다. 스도쿠에서도 모든 경우의수를 1~9까지 다돌릴수있지만 다돌리게 되면 시간초과가 뜰수도 있다. 그래서 확인해야할 번호만 체크해서 돌려보는게 이문제의 포인트이다. 가로를 체크하는 배열, 세로를 체크하는 배열, 영역을 체크하는 배열 총3개를 만들어서 1~9까지 확인해보고 없는 숫자를 체크해두었다가 하나씩 넣어보면 된다. 소스코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172#include using namespace std; int map[10][10];in..
2017.07.13 -
[백준 2161번] 카드1
풀이거의 모든 시뮬레이션 문제가 그렇듯 문제에서 주어진 조건에 맞추어서 차근차근 코딩해주면 된다. 이 문제의 경우 카드를 버리는 행동을 출력으로 바꾸어주고, 맨위의 카드는 배열의 0번지 매아래의 카드는 배열의 마지막 번지로 생각하면 된다. 소스코드1234567891011121314151617181920212223#include using namespace std; int main() { int n, num[1001]; cin >> n; for (int i = 1; i
2017.07.05 -
[백준 6603번] 로또
풀이출력예시를 보면 마지막 숫자부터 바뀌는 것을 보면 DFS로 풀 수 있다는 것을 알 수 있다.현재위치와 스택에 쌓인 카운트를 세주면서 방문여부를 체크해 주면 된다. 로직1. 0번지에서 시작한다.2. 0번지 방문을 체크하고, 카운트를 1 증가시켜준다.3. 1번지로 이동한다.4. 1번지 방문을 체크하고, 카운트를 1 증가시켜준다.5. 1~4번 항목을 반복하여 카운트가 6인 경우 방문 배열을 체크하여 방문이 체크가 된 index만 출력한다.6. 방문 체크를 해제해 주고, 카운트를 증가시키지 않은 상태에서 오른쪽으로 한칸 이동후 반복한다. 소스코드123456789101112131415161718192021222324252627282930313233#include using namespace std; int n..
2017.07.05