본문 바로가기

알고리즘 문제/DP7

[개쉬운 풀이] 백준 2169 로봇 조종하기 CPP (14일차) 문제 생각1. 처음에는 단순하게 BFS로 풀면 된다고 생각했다. 그러나 각 배열에서 들어온 방향에 따라 결과가 달라질 수 있다는 것을 포착했다.2. 따라서 2중 배열이 아닌 3중 배열을 통해 방향성을 고려하였다.3. queue를 이용하다 보니 시간초과가 발생하였다. 따라서 이를 dfs와 dp를 활용한 수식으로 바꾸어 주었다. 풀이#include #include #include using namespace std;const int MAX = 1001;const int INF = -1e9;int N, M;int map[MAX][MAX];int dx[3] = {0,0,1}; //좌 우 밑int dy[3] = {-1,1,0};bool isVisited[MAX][MAX];int dp[MAX][MAX][3];voi.. 2024. 12. 5.
[개쉬운 풀이] 백준 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.
[개쉬운 풀이] 백준 15989 1, 2, 3 더하기 4 (8일차) https://www.acmicpc.net/problem/15989 문제 생각처음에는 이항계수 문제인 줄 알았다. 그러나 순서 상관 없이 오직 정수 1, 2, 3을 이용해서 모든 수를 만드는 문제이다. 그래서 처음 DP로 접근하여 생각을 해보았다. 정수 / 3으로 3이 몇개 들어가는지 계산을 해보았고 이후 각 3의 개수에 따라 2가 들어가는 갯수만 세주면 나머지 1은 자동으로 빈자리를 채워준다. 이렇게 생각하니 DP까지도 생각할 필요 없이 단순 계산으로 풀 수 있었다. 즉, N을 3으로 나누고, 3을 몇개 쓸 것인지 for 문을 통해서 돌린다. 이후 3으로 사용하고 남은 나머지 값(=tmp)에 tmp/2 +1 하면 답이다.->tmp/2 + 1에서 +1을 한 이유는 2를 아예 안쓰는 경우를 더한 것이다. .. 2024. 11. 29.
[프로그래머스] 카카오 2022 코딩 테스트 공부 https://school.programmers.co.kr/learn/courses/30/lessons/118668[프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr](https://school.programmers.co.kr/learn/courses/30/lessons/118668)문제당신은 코딩 테스트를 준비하기 위해 공부하려고 합니다. 코딩 테스트 문제를 풀기 위해서는 알고리즘에 대한 지식과 코드를 구현하는 능력이 필요합니다.알고리즘에 대한 지식은 알고력, 코드를 구현하는 능력은 코딩력이라고 표현합니다. 알고력과 코딩력은 0 이상의 정수로 표현됩니다.문제를.. 2024. 10. 11.