본문 바로가기

알고리즘

BOJ 15778 · Yut Nori 알고리즘 분류 : 시뮬레이션윷놀이 게임을 프로그래밍해야 하는 문제다. 문제에 주어진 조건 그대로 구현해야 한다. 서브태스크 순서대로 설계하면 도움이 된다.우선 윷놀이 판에 대한 좌표를 분석하는 것이 좋다.말이 놓이는 칸은 일정한 규칙을 가지고 있다. 가장 자리 라인은 6의 배수, 대각선 라인은 5의 배수이다좌표를 (X, Y)라고 했을 때, 규칙은 아래와 같다.↑(X, 30)  |  ←(0, Y)  |&nb..
BOJ 15653 · 구슬 탈출 4 알고리즘 분류 : BFS구슬 탈출 시리즈의 네 번째 문제다. '구슬 탈출 2'에서 10번 이동 제한만 없애주면 된다. 자세한 구현 방법은 이전 문제 참조.C++ 소스코드#include <cstdio> #include <queue> using namespace std; struct bead { int rx, ry, bx, by, d; }; int n, m; char a[10][10]; bool check[10][10][..
BOJ 15644 · 구슬 탈출 3 알고리즘 분류 : BFS구슬 탈출 세 번째 문제다. 이전 문제인 '구슬 탈출'과 '구슬 탈출 2'를 해결했으면, 조금만 추가해서 풀 수 있다. 자세한 내용은 이전 문제 참조. 이 문제가 구슬 탈출 시리즈 중에선 가장 까다롭다. 움직인 방향을 출력해야 하기 때문이다.움직인 방향을 출력하기 위해서는 이전 위치를 저장하는 배열이 필요하다.빨간 구슬 X, Y좌표, 파란 구슬 X, Y 좌표, 방향 정보를 가진 path 배열을 4차원으로 선언..
BOJ 13460 · 구슬 탈출 2 알고리즘 분류 : BFS구슬 탈출 시리즈 두 번째 문제다. 첫 번째 문제인 '구슬 탈출'을 풀었으면, 이 문제는 쉽게 해결할 수 있다. 출력값만 바꾸면 된다. 자세한 내용은 이전 문제 참조.10번 이하로 탈출 실패 시, -1을 출력한다.탈출 성공 시, 움직인 횟수를 출력한다.C++ 소스코드#include <cstdio> #include <queue> using namespace std; struct bead { int ..
BOJ 13459 · 구슬 탈출 알고리즘 분류 : BFS보드 위에 빨간 구슬과 파란 구슬이 있고, 빨간 구슬만 구멍으로 빠뜨리는 문제다. 구슬 탈출 문제 시리즈는 이 문제를 포함하여, 총 4문제이다.파란 구슬이 구멍에 빠져서는 안되고, 파란 구슬과 빨간 구슬이 동시에 빠져서도 안 된다. 또한 빨간 구슬과 파란 구슬이 동시에 움직이고, 굴리면 벽에 부딪힐 때까지 굴러간다. 구슬이 동시에 움직이기 때문에 4차원 배열을 통해 방문 여부를 체크해주는 것이 좋다.Queue..
BOJ 15657 · N과 M (8) 알고리즘 분류 : 브루트 포스입력받은 N개의 숫자 중에서 비내림차순으로 M개를 뽑는 문제다. N과 M (4) 문제의 소스코드를 수정하면 된다.C++ 소스코드#include <cstdio> #include <algorithm> #include <vector> using namespace std; int n, m; int a[8]; vector<int> v; void solve(int index, int c..
BOJ 15656 · N과 M (7) 알고리즘 분류 : 브루트 포스입력받은 N개의 숫자 중에서 중복 가능하게 M개를 뽑는 문제다. N과 M (3) 문제의 소스코드를 조금 수정하면 된다.C++ 소스코드#include <cstdio> #include <algorithm> #include <vector> using namespace std; int n, m; int a[8]; vector<int> v; void solve(int cnt) { ..
BOJ 15655 · N과 M (6) 알고리즘 분류 : 브루트 포스입력받은 N개의 숫자 중에서 M개를 오름차순으로 뽑는 문제다. N과 M (2) 문제의 소스코드를 수정하면 된다.C++ 소스코드#include <cstdio> #include <algorithm> #include <vector> using namespace std; int n, m; int a[8]; vector<int> v; void solve(int index, int cn..
BOJ 15654 · N과 M (5) 알고리즘 분류 : 브루트 포스N개의 숫자를 입력받고, 그 숫자 중에서 M개를 뽑아서 출력하는 문제다. N과 M (1)의 소스코드를 살짝 수정하면 된다. N과 M (1)에서는 1~N까지의 숫자를 사용했으니, 이번에는 배열에 있는 N개의 숫자를 사용하면 된다.C++ 소스코드#include <cstdio> #include <algorithm> #include <vector> using namespace std; int n..
BOJ 15652 · N과 M (4) 알고리즘 분류 : 브루트 포스N개의 숫자 중에서 M개를 뽑는 문제다. 단, 같은 수를 여러 번 뽑아도 되며, 고른 숫자는 비내림차순이어야 한다. N과 M (2) 문제의 코드에서 시작 지점을 수정하면 된다. 시작 지점은 이전에 뽑은 숫자이다. 재귀 함수 호출에 전달할 값을 사용한 숫자와 똑같이 보내면 된다.C++ 소스코드#include <cstdio> #include <vector> using namespace std; ..
BOJ 15651 · N과 M (3) 알고리즘 분류 : 브루트 포스N개의 숫자 중에서 M개를 뽑는 문제다. 숫자를 뽑을 때 같은 수를 여러번 골라도 된다. 이 문제는 N과 M (1) 문제의 소스코드에서 check 배열만 사용하지 않으면 된다.C++ 소스코드#include <cstdio> #include <vector> using namespace std; int n, m, x; vector<int> a; void solve(int cnt) { ..
BOJ 15650 · N과 M (2) 알고리즘 분류 : 브루트 포스N개의 숫자 중에서 M개를 뽑아서 출력하는 문제다. 단, 중복된 수열이 없어야 하고, 오름차 순으로 출력해야 한다. N과 M (1)의 코드에서 for문의 시작 지점을 수정하면 된다. 시작 지점은 이전에 뽑은 숫자+1 이다. 숫자+1을 다음 재귀 함수 호출에 전달하면 된다.C++ 소스코드#include <cstdio> #include <vector> using namespac..