Programming 66

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

2174번 로봇 시뮬레이션

배열을 입력 받을 때, 쉽게 말해서 x축으로 대칭해서 배열을 입력 받았다.W, E 방향은 상관이 없지만, N, S 방향은 x축으로 뒤집어졌기에 방향이 반대로 입력받게 하면 된다.그리고 명령어 L, R을 할 때에도 반대로 생각을 해줘야한다. 문제 예제에서 1번 로봇이 R 명령어를 수행하고 F 명령어를 수행하면 벽에 충돌한다.그러나 반대로 입력 받은 상태에서 같은 명령어를 수행하면 충돌하지 않고 문제가 없어진다. 즉, 문제 에제에서의 R 명령어는 내가 짠 코드에서는 왼쪽으로 회전을 해야 정답과 같다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263..

Algorithm/BOJ 2018.03.07

1325번 효율적인 해킹

DFS로 풀면 금방 풀 수 있는 문제이다.각 노드 마다, DFS 탐색을 하여 dist를 만들어놓은 배열에 + 저장시킨다.그래서 배열의 값이 가장 큰 노드들을 출력시키면 된다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657#include #include #include #include using namespace std; int check[10001];vector adj(10001);bool isVisited[10001];int n, m;vector ans; void push_ans() { int max_val = -98765432; for (int i = 1; i..

Algorithm/BOJ 2018.03.06

3184번 양

늑대가 있는 곳이나, 양이 있는 곳의 위치를 큐에 저장시키고, 그 근처의 늑대의 수와 양의 수를 세면 된다.그 후에 양이 늑대보다 많으면 양의 수를 증가시키고, 반대로 늑대가 양보다 많을 경우에는 양은 다 잡아먹히게 되므로 늑대의 수만 증가시키면 된다.BFS로 풀 수 있다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include #include using namespace std; char map[251][251];bool isVisited[251][251];int R, C, ans_sheep, ans_wolf;..

Algorithm/BOJ 2018.03.05

1251번 단어 나누기

단어만 잘 나눈다면, 쉽게 풀리는 문제이다.string 자료형으로 문제를 풀었는데, 항상 문자열 마지막에는 공백 문자가 있다는 것을 기억 해야겠다. 단어를 뒤집을 때, size() - 1 이아니라, size() 부터 시작해서 뒤집었더니 틀렸었다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include #include #include using namespace std; string str, a_text, b_text, c_text;vector v; void sol() { string tempA, tempB, tempC, ret_text; for (int i = a_text.size() - ..

Algorithm/BOJ 2018.03.02