본문 바로가기

cpp46

[개쉬운 풀이] 백준 3687 성냥개비 CPP (13일차) 문제 생각단순한 DP문제라고 생각했다. 그러나 초기값만 수동으로 설정하는 것이 싫어서 고민하던 도중, 그냥 수동으로 설정하였다.이때 앞자리가 0이되면 안되는 것을 고려해야한다. 1. 작은 수작은 수는 2~8개 를 사용하면 이렇게 나온다. {0,0,1,7,4,2,0,8,10}그러나 여기서 앞자리가 0이 될 수 없으므로 6개는 6으로 재초기화한다.이후 성냥개비는 각각 2~7개 까지 각 숫자에 사용될 수 있으므로 현재 숫자에 2~7개를 뺀 숫자의 dp를 확인하여 숫자를 만들어 나간다.dp[n] = min(dp[n], dp[n-(성냥개비 가능 갯수)] * 10 + 초기 성냥개비 숫자[성냥개비 가능갯수]) 가 된다. 2. 큰 수패턴을 보면 7과 1로만 이루어진다. 즉 짝수면 1로 시작하고 홀수면 7로 시작하면 된.. 2024. 12. 4.
[개쉬운 풀이] 백준 1806 부분합 CPP (12일차) https://www.acmicpc.net/problem/1806 문제 생각1. 연속된 부분합이라는 단어를 보고 투포인터를 고려하였다. 2. 부분합 중에서 합이 S 이상이 되는 것 중, 가장 짧은 길이를 구하여야 한다.3. 그렇다면 누적합보다 크거나 같으면 왼쪽에서 빼고, 작으면 오른쪽을 더하면 된다. 풀이#include #include using namespace std;int N;long long S;vector v;void input(){ cin >> N >> S; for(int i = 0; i > x; v.push_back(x); }}void sol(){ if(v[0] == S){ cout = S){ answer = min(answ.. 2024. 12. 3.
[2024 AOC] 2일차 CPP https://adventofcode.com/2024 Advent of Code 2024 adventofcode.com 문제 1번 풀이#include #include #include using namespace std;const int INPUT_MAX = 1000;const int DIFF_LEVEL = 3;bool sol(vector v){ bool increase = true; for(int i = 0; i DIFF_LEVEL) return false; if(v[i] == v[i+1]) return false; if(i == 0){ increase = v[i] = v[i+1]) return false; } .. 2024. 12. 3.
[개쉬운 풀이] 백준 15683 감시 CPP (11일차) 문제https://www.acmicpc.net/problem/15683 생각1. 먼저, CCTV의 최대 갯수가 8개 이므로 각각의 CCTV 방향을 모두 고려해서 해결해야하는 완전탐색 문제이다.2. 여기서 CCTV가 감지한 부분을 처음에는 단순하게 #처리 하려고 했지만, 백트래킹하는 과정에서 #이 겹치고 삭제되면서 오류가 발생할 수 있다는 것을 인지하였다.3. 따라서 isVisited를 통해 +1과 -1을 하는 방식으로 진행하였다.4. CCTV는 CCTV를 통과할 수 있으며, CCTV는 일직선으로 탐지하고 각 타입에 따라 방향이 다르다.5. 즉, 일직선으로 탐지하는 코드 하나에 각 타입별로 탐지 코드를 넣어서 작성하였다.6. 마지막 출력을 진행할때, isVisited가 0이고 map에서 0인 부분을 cou.. 2024. 12. 2.