[백준 2206번] 벽 부수고 이동하기 (C++)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/2206 (1,1)에서 (n,m)까지의 최소 경로를 구하는 문제다. 조건: 길은 0, 벽은 1로 표현되어 있으며 벽은 최대 1회까지 부술 수 있다.평범하게 BFS로 구현하되 벽을 부순적이 있는지 확인할 수 있어야한다. 예전에 https://www.acmicpc.net/problem/31404에서 특정위치에 반복해서 들어가는 것 뿐만 아니라 들어오는 방향까지 고려해서 3차원 배열을 이용하여 문제를 해결했었다. 똑같은 문제라고 생각했고 visited배열을 visited[x][y][cnt]로 설정하여 cnt에 벽을 부쉈는지 확인하는 배열을 추가했다. 배열이 3차원이 된 것만 빼면 나머지는 well-known한 BFS탐색이다.#include #includ..
[백준 1437번] 수 분해 (C++)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/1437풀이가 2가지가 있다.1. Dp2. 수학1. 다이나믹 프로그래밍Dp로 풀려고 하면 당연히 점화식을 찾아야 하고 노가다를 하다보면 점화식이 쉽게 찾아진다.n > 4인 경우에서 dp[n] = dp[n-3]*3이 된다. #include #define mod 10007using namespace std;int main() { int n; cin >> n; int* arr = new int[n+1]; arr[0] = 0; arr[1] = 1; arr[2] = 2; arr[3] = 3; arr[4] = 4; for(int i = 5; i  2. 수학수학적 접근이 쉽지 않은데... 결론적으로는 3을 가장 많이 만들면 된다.DP로 접근할때 노가다한 수들을..
[백준 28703번] Double it (C++)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/28703maxPq, minPq 우선순위 큐 2개를 이용해서 하나씩 뽑으면서 차이의 최솟값을 갱신해나가면 된다.문제는 위의 과정의 종료조건인데, 구해야 하는 것이 최대값-최솟값의 차이기 때문에 만약 입력으로 주어지는 모든 수를 2배를 할 필요가 없다. 모든수가 2배가 되면 1/2배를 할 수 있고 그럼 2배가 된 상태보다 차이도 1/2이 되므로 모든 수가 2배이상으로 커지는 것은 의미가 없다.따라서 모든 수가 2배가 되기 전까지가 반복문의 종료조건이 된다. #include #include using namespace std;int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, num;..
[백준 20302번] 민트 초코 (C++)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/20302입력받는 모든 수를 소인수 분해 해서 곱셈과 나눗셈으로 나눠주면 된다.곱셈일 때는 등장하는 소수의 개수만큼 배열에서 더해주고, 나눗셈일 때는 반대로 빼주면 된다.최종 배열을 탐색하면서 0보다 작은 값이 있으면 분모에 해당 소인수가 살아있다는 뜻이므로 결과가 유리수가 된다.소인수분해하는 코드를 알아가기 좋은 문제다. #include #include #include #include #define endl "\n"using namespace std;int n, num;vector arr(100001,0);void fac(int a, bool check){ int tmp = sqrt(a); if(check){ for(int i = 2; i 1..
[백준 2048번] Hello, 2048!
·
📚알고리즘/백준
https://www.acmicpc.net/problem/2048노가다를 좀 하다가 맞을 거 같아서 찍었다...찍었다고 말하긴 했지만 사실상 수학적 직관력이 필요한 문제아몰랑 노가다의 결과는 r >= 4이면, 마지막에 붙인 수를 2로 r만큼 나누면 홀수가 된다. 따라서 r >= 4 일때는 r이 답이고, 다른 경우에는 수가 작으니 직접 다 붙여서 2로 몇번이나 나눠지는지 직접 나눠보면 된다. #include #include #include #define endl "\n"using namespace std;int t,l,r;int main() { ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); cin >> t; while(t--){ cin >> l ..
[백준 12923번] 별 모으기 (C++)
·
📚알고리즘/백준
https://www.acmicpc.net/problem/12923좀 애먹은 문제다. 문제에서 주어지는 테스트 케이스가 간단해서 그런지 반례 상황을 생각못하고 여러번 틀리면서 찾았다. 문제는 최소 클리어 횟수를 사용해서 스테이지의 모든 별들을 모으는 코드를 작성하라는 것이다.아마 대부분 b를 오름차순으로 정렬해서 작은 b부터 얻을 수 있는 별들을 다 얻고 부족하면 먹을 수 있는 a로 별을 얻어서 b를 채우는 식으로 풀면 되겠다고 생각할 것이다.하지만 a로 별을 얻을 때 어떤 스테이지 부터 먹어야 하는지 고민이 될 것이다. 코드는 다음과 같다.#include #include #include #define pii pair#define INF 1000000000using namespace std;bool co..
요플레에
'📚알고리즘/백준' 카테고리의 글 목록 (2 Page)