Algorithm/BOJ 78

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

2858번 기숙사 바닥

이 문제의 경우 3*3의 방의 크기부터 시작해서 크기를 구하면 된다.브루트 포스 문제이기에 나는 이중 for문으로 모든 경우를 다 돌려봤다. for문을 3부터 시작하는 이유는 바닥의 길이가 2일 경우에는 갈색 타일이 없기 때문이다.문제의 입력에서 B는 1보다 크거나 같다라고 적혀 있다.3 * 3의 크기일 경우, 갈색 타일이 1개가 생긴다. 너무 무식하게 푼 것 같아서, 다른 사람의 글을 찾아보니 타일의 총 갯수로 약수를 구해서 문제를 해결하는 방법도 있다.수학적 접근이라 생각하지 못했는데, 한 번 공부해야겠다. 123456789101112131415161718192021222324252627282930#include using namespace std; int R, B;int main(int argc, ..

Algorithm/BOJ 2018.03.02

3055번 탈출

블로그를 시작하기 전에, 5427번 불 문제를 푼 적이 있어서 풀기 무난했던 문제이다.처음 접근했을 경우에는 어려웠을텐데, 한 번 풀어본 유형이라 무난하게 풀었다.5427번 문제는 다시 한 번 풀 때, 업로드 해야겠다. 이번 문제는 BFS로 해결 가능하다. 큐를 물의 위치를 저장하는 큐, 고슴도치의 위치를 저장시키는 큐.2개를 만들어서 순차적으로 bfs 탐색을 하면 풀 수 있다. 여기서 중요한 것은, 문제의 조건에서 고슴도치는 다음 시간에 물이 찰 것이라고 예상되는 곳은 이동할 수 없다고 했으므로,물의 큐를 먼저 진행하고, 고슴도치의 큐를 진행하면 될 것이다. 소스는 아래와 같다. 123456789101112131415161718192021222324252627282930313233343536373839..

Algorithm/BOJ 2018.03.01

7569번 토마토

이 문제는 7576번 토마토 문제의 심화 문제이다. 7576번 토마토 문제의 경우엔 2차원 토마토이지만, 이번 문제는 3차원이다.그래서 입체적으로 상 하, 양 옆으로 동 서 남 북을 같이 고려해주면 되는 문제이다. map[z][x][y] 이런식으로 나는 3차원 배열을 선언해주었다. z : Hx : Ny : M 이라고 생각하면 된다.그 후, BFS를 통해 최소 날짜를 출력해주면 되는 문제이다.단, 문제의 출력 부분에서 예외처리도 필요하므로 처음부터 모두 다 익었을 경우의 조건도 추가해줘야한다. 소스는 아래와 같다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585..

Algorithm/BOJ 2018.02.28

2839번 설탕 배탈

처음 이 문제에 접근했을 때, N을 3으로 나누고, 5로 나누고 사칙 연산을 통해서 min 값을 찾으려고 했다.그런데, 예제 입력에 11같은 경우는 5kg + 3kg + 3kg 으로 만들어질 수 가 있어서 이 방식으로 하려니 너무 복잡해졌다.그래서 다른 방법을 찾았다이중 for문으로i = 0 부터 시작해서 5kg * (i++) + 3kg * (j++) 이런식으로 i를 늘려가며, N을 만족하는 i, j를 찾으니 단순하게 문제를 해결할 수 있었다. 전에 "10448번 유레카이론" 문제를 풀 때도 이런식으로 문제를 해결했는데, 시간이 지나니 잊어버렸다.다시 한번 보도록 해야겠다. 1234567891011121314151617181920212223#include using namespace std; int ma..

Algorithm/BOJ 2018.02.28

11718번 그대로 출력하기

그대로 문자열 출력하는 방식이 필요한데, 예전에 배운 getchar를 잊어버려서 복습용으로 해결한 문제다음에 문자열 출력에 이용하면 좋을 것 같다. 12345678910111213#include using namespace std;int main(int argc, char const *argv[]) { char a; a = getchar(); while (a != -1) { putchar(a); a = getchar(); } return 0;} Colored by Color Scriptercs 문제 출처 : https://www.acmicpc.net/problem/11718

Algorithm/BOJ 2018.02.28