핵심 풀이위 문제는 상담이 끝날 경우 바로 상담을 할 이유가 없다 계단 뛰기 문제와 느낌이 다르다어떤 날은 패스할 수도 있다. 그래서 (현재 이전의 상담을 진행할 수 있는 금액인 maxs 변수) 값을 계속 갱신한다. DP의 점화식은 아래와 같다. // pList[i] = 상담 진행시 받는 금액 // dist = 현재 날 + 상담 진행 기간 // 이전의 모아둔 최대 금액과 이 상담을 진행 했을 때의 금액 dp[dist] = max(dp[dist], maxs + pList[i]); // 현재 DP에 저장되어 있는 금액과 이 상담을 진행 했을 때의 금액 dp[dist] = max(dp[dist], dp[i] + pList[i]); 전체 코드를 다시 보니 수정하면 더 깔끔하게 줄일 수도 ..
#include #include #include #include #include using namespace std;struct Node{ int id, rolc;};void leftRotate(deque &dq){ dq.push_back(dq.front()); dq.pop_front();}void rightRotate(deque &dq){ dq.push_front(dq.back()); dq.pop_back();}int main(){ vector > dqV(5); // N = false, S = true for (int i = 1; i > c; if (c == '1') { dqV[i].push_b..
#include #include #include using namespace std;int dx[4] = {0, 1, 0, -1};int dy[4] = {-1, 0, 1, 0};int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); // 보드의 크기; int n, m; // 청소기의 위치 및 방향 int r,c, d; // 입력 cin >> n >> m; cin >> r >> c >> d; // 0 = 미청소, 1 = 벽, 2 청소완료 auto board = vector>(n, vector(m, 0)); for (int i = 0; i > board[i][j]; } } ..
간단 문제 설명0으로 채워진 배열을 입력받은 배열로 바꾸려고 한다. 아래의 동작만으로 최소한의 움직임은? == (동작 Count 구하기)increase: 모든 배열의 값을 동일한 x의 값으로 증가smash: 내가 원하는 것만 0으로 초기화 가능 풀이일단 문제를 보고 여러가지의 방법을 생각을 해봤습니다. 1. 어떤 수학적 논리가 존재하는가? (수학 9등급이라서 패스) 2. 완전탐색으로 경우의 수를 다 찾아야 하는건가? (백트래킹 등) 경우의 수가 많음 그냥 거꾸로 더하지 말고 빼면서 검산하면 되는거 아닌가라는 생각이 듬 만약 반대로 ( 1, 1, 3)을 ( 0, 0, 0)으로 만들어야한다고 생각해보자 당연히 제일 작은 값인 1이 제일 마지막 increase 명령으로 들어오지 않을까?즉 (0, 0, 2)..
해당 문제는 설명에 있는 그대로 조건만 잘 지키면 된다. 핵심 자료구조는 queue인 듯 하고 아래 코드에 주석을 달아두었습니다.#include #include #include using namespace std;int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int N, K, L; // Current X, Current Y int cX = 1, cY = 1; // Game Count int count = 0; // 방향 동남서북 EX=> 0, 1, 2, 3 char location = 0; int dx[4] = {0,1,0,-1}; int dy[4] = {1, 0, -1, 0..