프로그래밍

    BOJ 13460 · 구슬 탈출 2

    알고리즘 분류 : BFS 구슬 탈출 시리즈 두 번째 문제다. 첫 번째 문제인 '구슬 탈출'을 풀었으면, 이 문제는 쉽게 해결할 수 있다. 출력값만 바꾸면 된다. 자세한 내용은 이전 문제 참조. 10번 이하로 탈출 실패 시, -1을 출력한다.탈출 성공 시, 움직인 횟수를 출력한다. C++ 소스코드 #include #include using namespace std; struct bead { int rx, ry, bx, by, d; }; int n, m; char a[10][10]; bool check[10][10][10][10]; queue q; const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1}; void move(int &x, int &y, int &c, in..

    BOJ 13459 · 구슬 탈출

    알고리즘 분류 : BFS 보드 위에 빨간 구슬과 파란 구슬이 있고, 빨간 구슬만 구멍으로 빠뜨리는 문제다. 구슬 탈출 문제 시리즈는 이 문제를 포함하여, 총 4문제이다.파란 구슬이 구멍에 빠져서는 안되고, 파란 구슬과 빨간 구슬이 동시에 빠져서도 안 된다. 또한 빨간 구슬과 파란 구슬이 동시에 움직이고, 굴리면 벽에 부딪힐 때까지 굴러간다. 구슬 2개가 동시에 움직이기 때문에 4차원 배열을 통해 방문 여부를 체크해주면 편하다. Queue에 빨간 구슬의 (X, Y) 좌표, 파란 구슬의 (X, Y) 좌표를 모두 넣는다.방문 여부를 확인할 check 배열을 4차원 배열로 선언한다. 배열의 인덱스는 [빨간 X좌표] [빨간 Y좌표] [파란 X좌표] [파란 Y좌표] 이다.구슬을 굴릴 때, 구슬의 다음 위치가 벽(#..

    BOJ 15657 · N과 M (8)

    알고리즘 분류 : 브루트 포스 입력받은 N개의 숫자 중에서 비내림차순으로 M개를 뽑는 문제다. N과 M (4) 문제의 소스코드를 수정하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; vector v; void solve(int index, int cnt) { if (cnt == m) { for (auto k : v) printf("%d ", k); printf("\n"); return; } for (int i=index; i

    BOJ 15656 · N과 M (7)

    알고리즘 분류 : 브루트 포스 입력받은 N개의 숫자 중에서 중복 가능하게 M개를 뽑는 문제다. N과 M (3) 문제의 소스코드를 조금 수정하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; vector v; void solve(int cnt) { if (cnt == m) { for (auto k : v) printf("%d ", k); printf("\n"); return; } for (int i=0; i

    BOJ 15655 · N과 M (6)

    알고리즘 분류 : 브루트 포스 입력받은 N개의 숫자 중에서 M개를 오름차순으로 뽑는 문제다. N과 M (2) 문제의 소스코드를 수정하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; vector v; void solve(int index, int cnt) { if (cnt == m) { for (auto k : v) printf("%d ", k); printf("\n"); return; } for (int i=index; i

    BOJ 15654 · N과 M (5)

    알고리즘 분류 : 브루트 포스 N개의 숫자를 입력받고, 그 숫자 중에서 M개를 뽑아서 출력하는 문제다. N과 M (1)의 소스코드를 살짝 수정하면 된다. N과 M (1)에서는 1~N까지의 숫자를 사용했으니, 이번에는 배열에 있는 N개의 숫자를 사용하면 된다. C++ 소스코드 #include #include #include using namespace std; int n, m; int a[8]; bool check[8]; vector v; void solve(int cnt) { if (cnt == m) { for (auto k : v) printf("%d ", k); printf("\n"); return; } for (int i=0; i

    BOJ 15652 · N과 M (4)

    알고리즘 분류 : 브루트 포스 N개의 숫자 중에서 M개를 뽑는 문제다. 단, 같은 수를 여러 번 뽑아도 되며, 고른 숫자는 비내림차순이어야 한다. N과 M (2) 문제의 코드에서 시작 지점을 수정하면 된다. 시작 지점은 이전에 뽑은 숫자이다. 재귀 함수 호출에 전달할 값을 사용한 숫자와 똑같이 보내면 된다. C++ 소스코드 #include #include using namespace std; int n, m, x; vector a; void solve(int index, int cnt) { if (cnt == m) { for (auto i : a) printf("%d ", i+1); printf("\n"); return; } for (int i=index; i

    BOJ 15651 · N과 M (3)

    알고리즘 분류 : 브루트 포스 N개의 숫자 중에서 M개를 뽑는 문제다. 숫자를 뽑을 때 같은 수를 여러번 골라도 된다. 이 문제는 N과 M (1) 문제의 소스코드에서 check 배열만 사용하지 않으면 된다. C++ 소스코드 #include #include using namespace std; int n, m, x; vector a; void solve(int cnt) { if (cnt == m) { for (auto i : a) printf("%d ", i+1); printf("\n"); return; } for (int i=0; i