Programming 66

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

2146번 다리 만들기

이 문제의 예제에서는 영역이 3가지로 구분이 될 수 있다. 그래서 나는 DFS를 통해 세 영역을 구분해주었다.첫 번째 영역을 1, 두번째 영역을 2, 세번째 영역을 3 이렇게 구분해준 뒤, BFS를 통해 각 영역간의 최소 거리를 구했다.이렇게 푸는 것이 가장 단순한 방법은 아니지만, 이렇게 밖에 생각이 안났다. 결국 DFS, BFS 두 알고리즘을 모두 알아야 풀 수 있는 문제이다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394#inc..

Algorithm/BOJ 2018.02.27

2966번 찍기

전형적인 완전 탐색 문제이다.상근, 창영, 현진의 찍은 답을 정답과 비교해서 맞은 갯수를 처리하여 출력하면 된다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889#include #include #include using namespace std; string Adrian, Bruno, Goran;char answer[101];int cnt[3];vector result;int N; bool compare(const pair &a, const pair &..

Algorithm/BOJ 2018.02.27

1963번 소수 경로

start : 1033, finish : 8179 라고 하면, start를 큐에 넣고 BFS 탐색을 이용해 풀면 된다.8179가 pop될 때의 ret를 출력시키면 되는 문제이다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100#include #include #include #include using namespace std; class Info {public: int data, ret; Info() {}; Inf..

Algorithm/BOJ 2018.02.26

2573번 빙산

dfs 알고리즘으로 풀면 되는 문제인데, 처음에 어떻게 접근해야할지 감이 안잡혔다.그런데 문제 유형이 2638번 치즈 문제와 비슷한 문제였다. 2638번 치즈 : https://www.acmicpc.net/problem/2638 다행히, 치즈 문제를 풀었어서 그때의 기억으로 문제를 풀었다.다른 점이 있다면, 치즈는 0이 아닌 수로 둘러 쌓인 0 근처의 값들을 감소시키지 않는데, 이 문제는 이것까지 고려해야 한다. 이중 for문으로 전체를 돌리면 간단하게 해결되는 문제이다. 소스는 아래와 같다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364..

Algorithm/BOJ 2018.02.23