Algorithm/BOJ 78

2206번 벽 부수고 이동하기

BFS 탐색으로 풀 수 있는 문제이다. 우선 (1,1)의 좌표에서 시작하여 board == 0 인 곳으로 이동을 한 뒤, 벽을 만나게 되면 now.broken이 0일 경우만벽을 부수고, 벽이 아닌 곳으로만 이동하면 되는 문제이다. 단, 벽은 1개까지만 부실 수 있다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#include #include using namespace std;class Node {public: int x, y, dist, broken; Node() {}; Node(int _x, int..

Algorithm/BOJ 2018.03.29

14888번 연산자 끼워넣기

dfs로 모든 경우를 다 탐색하면 된다. 숫자는 변하지 않으므로 고정시키고 연산자만 for문과 재귀로 다 쓰면 된다.다시 한번 풀기!!!최대, 최소값은 10억이므로 처음에 초기화를 시켜주었다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061#include #include #include #define INF 1000000000#define ll long longusing namespace std; int N;int op[4];int number[12];ll int Max = -INF;ll int Min = INF; void dfs(int depth, ..

Algorithm/BOJ 2018.03.23

14499번 주사위 굴리기

말 그대로 주사위가 동, 서, 남, 북 으로 굴려졌을 때 어떻게 옮겨지는지를 구현하면 된다.너무 노가다로 푼 것 같다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132#include #include using namespace std; int ..

Algorithm/BOJ 2018.03.23

14502번 연구소

이 문제는 무조건 3개의 벽을 세워야 하므로, 벽 부터 세워야 한다. dfs를 이용해 벽을 세운 뒤 bfs 탐색을 통해 바이러스를 퍼뜨리고 안전 영역의 갯수를 세면 된다.벽 세우는 것이 조금 까다로운 문제였다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#include #include #include using namespace std; int N, M, ret = -9876543;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0 ..

Algorithm/BOJ 2018.03.22

13458번 시험감독

총감독관은 오직 1명이므로, 각 시험장의 응시자수에서 총감독관이 감시할 수 있는 수 B를 뺀 뒤, 부감독관의 수를 구하면 된다.input의 범위가 백만이므로 int는 범위가 초과될 수 있다. 그래서 long long을 써주어야 한다. 1234567891011121314151617181920212223242526272829303132333435363738394041#include #define ll long longusing namespace std; ll int N, B, C;ll int A[1000001]; int main() { cin >> N; for (int i = 0; i > A[i]; } cin >> B >> C; ll int total = 0; for (int i=0; i

Algorithm/BOJ 2018.03.22

14503번 로봇 청소기

문제의 조건대로 방향을 변경해가며 구현하면 되는 문제이다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283#include #define CLEAN 2using namespace std; int N, M;int dx[4] = {-1, 0, 1, 0};int dy[4] = {0, 1, 0, -1};int map[51][51], cnt_map[51][51], ret; int change_dir(int dir) { switch (dir) { case 0 : return 3; cas..

Algorithm/BOJ 2018.03.22

14500번 테트로미노

ㅓ ㅏ ㅗ ㅜ 를 제외한 나머지 테트로미노는 DFS, depth == 4 로 만들 수 있다. 그래서 최대값을 찾으면 되고, ㅓ 이 부분은 + 의 배열을 모두 다 더한 다음에, 가운데를 제외한 곳에서 최소값을 빼면 된다.그러나, 블럭의 갯수가 3개의 경우도 생기므로 이는 무시하고, 4개 또는 5개일 때만 값을 처리해주면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include #include using namespace std; int N, M;int mat[501][501];bool isVisited[501][..

Algorithm/BOJ 2018.03.15

12100번 2048 (Easy)

어떻게 이동되는지를 잘 파악하면 된다.위로 이동할 경우에는 0번째 행부터 올라가야하고, 왼쪽으로 이동할 경우에는 1열부터 합쳐지도록 해야한다.반대로, 아래일 경우에는 마지막 행부터 합쳐야하고, 오른쪽 이동은 마지막 열부터 합쳐지도록 해야한다. 이 문제 또한 구현 문제이다. 재귀인 dfs를 잘 사용해서 모든 경우의 수를 다해보면 된다.그리고 중요한 것은 이동할 때, 블럭을 기억할 수 있는 변수를 만들어주어야 한다.나 같은 경우에는 같은 배열을 하나 만들어서 거기에 저장할 수 있도록 했다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566..

Algorithm/BOJ 2018.03.15

14891번 톱니바퀴

구현 문제이기 때문에, 특별한 알고리즘이 필요하진 않다.톱니바퀴가 어떻게 움직이는지를 잘 파악하고 구현하면 되는 문제이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133#include #include #include using names..

Algorithm/BOJ 2018.03.15