본문 바로가기

알고리즘/백준2

[BOJ] 1052 물병 C++ 문제이해 N개의 물병을 가지고 있는 상태에서 차있는 물병이 K개가 되도록 만드려고 한다. 재분배는 같은 양의 물이 들어있는 물병 두 개를 고르고 그 다음에 한 개의 물병에 다른 한 쪽에 있는 물을 모두 붓는다. (상점에서 새로운 1리터 물병을 살 수 있다.) 즉, N으로 같은 양의 물이 들어 있는 물병을 합치면서 K개가 될 수 있는지 확인하고 된다면 상점에서 사야하는 물병의 최솟값을 구해야 하는 문제이다. 아이디어 구상 N, K = 3, 1 1 1 1 -> 2 1 -> 2 2 -> 4로 1개의 물병을 구매하면 된다. N, K = 13, 2 1 x 13 -> 2x6, 1 -> 4 4 4 1 -> 8 4 1 -> 8 4 4 -> 8 8 -> 16으로 3개의 물병을 구매하면 된다. 위와 같이 N은 2로 나누면.. 2023. 11. 13.
[BOJ] 2573 빙산 C++ 문제 이해 n x m의 배열이 주어지고 한 덩이의 빙산으로 시작해서 두 덩이 이상으로 분리되는 최초의 시간을 구하는 문제. 단, 전부 다 녹을 때까지 두 덩이 이상으로 분리되지 않으면 0 출력. 아이디어 구상 2중 반복문 안에서 방문하지 않은 경우 bfs를 시작해서 빙산의 상하좌우를 탐색하여 0이면 2번 배열에 현 위치를 체크 해두고 양수라면 1번 배열에 방문체크를 하고 큐에 넣어준다. bfs 횟수는 곧 빙산의 덩어리의 개수를 의미한다. 코드 #include #include using namespace std; #define MX 305 int n, m, ice, sw; int a[MX][MX], vis[MX][MX], vis2[MX][MX]; int dx[] = { 0,0,1,-1 }; int dy[].. 2023. 8. 25.