[프로그래머스] 최적의 행렬 곱셈(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/12942 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include #include using namespace std;int solution(vector> matrix_sizes) { int n = matrix_sizes.size(); // dp[i][j] : i번쨰 행렬부터 j번째 행렬까지 곱할 때 드는 최소 연산 횟수 vector> dp(n, vector(n, 0)); for (int len = 1; len ::max(); ..
[백준] 2473번: 세 용액(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/2473 코드 구현v#include #include #include #include using namespace std;int main(){ int N; cin >> N; // 3 L(N); for (int i = 0; i > L[i]; } // 오름차순 정렬 sort(L.begin(), L.end()); long long closestSum = LLONG_MAX; // 가장 0에 가까운 합 long long ans1 = 0, ans2 = 0, ans3 = 0; for (int i = 0; i 0) right--; // 합이 0이면 바로 정답 출력 else { cout 해결 방법정렬 후 투 포인터를 사용하여..
[백준] 1202번: 보석 도둑(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/1202 코드 구현#include #include #include #include using namespace std;int main(){ int N, K; // 보석 수, 가방 수 cin >> N >> K; vector> jewels(N); // 보석 {무게, 가격} vector carryWeight(K); // 각 가방에 담을 수 있는 무게 for (int i = 0; i > jewels[i].first >> jewels[i].second; } for (int i = 0; i > carryWeight[i]; } // 무게 순 정렬 sort(jewels.begin(), jewels.end()); sort(carryWeight.begin..
[프로그래머스] 거스름돈(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/12907 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include #include using namespace std;int solution(int n, vector money) { // dp[i] : 금액 i를 만드는 방법의 수 vector dp(n + 1, 0); dp[0] = 1; for (int coin : money) { for (int i = coin; i 해결 방법DP를 이용하여 해결dp[i] :..
[프로그래머스] 사칙연산(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/1843 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include #include int max_val = std::numeric_limits::max();int min_val = std::numeric_limits::min();using namespace std;int solution(vector arr){ int n = (arr.size() + 1) / 2; // 숫자 개수 vector nums; vector ops; for (..
[백준] 2252번: 줄 세우기(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/2252 코드 구현#include #include #include using namespace std;int main(){ int N, M; cin >> N >> M; vector> graph(N + 1); vector degree(N + 1, 0); queue q; for (int i = 0; i > A >> B; graph[A].push_back(B); degree[B]++; } // 차수가 0인 학생먼저 큐에 삽입 for (int i = 1; i 해결 방법인접리스트와 차수를 저장하는 벡터를 이용하여 A -> B를 가리키는 인접리스트에 B의 차수를 증가시켜 저장차수가 낮은 학생부터 큐에 삽입하고 출력하면서 그 학생보다 뒤에 와..
[백준] 1806번: 부분합(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/1806 코드 구현#include #include #include using namespace std;int main(){ int N, S; cin >> N >> S; vector sequence(N); for (int i = 0; i > sequence[i]; } int answer = N + 1; int sum = 0, start = 0; for (int end = 0; end = S) { answer = min(answer, end - start + 1); sum -= sequence[start]; start++; } } if (answer == N + 1) cout 해결 방법Start 와 End 지점을 0으로 ..
[프로그래머스] 단속카메라(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42884 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include #include using namespace std;bool Compare(const vector& a, const vector& b){ return a[1] > routes) { int answer = 1; // 진출 시점 기준으로 오름차순 정렬 sort(routes.begin(), routes.end(), Compare); int out = rout..
[백준] 2206번: 벽 부수고 이동하기(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/2206 코드 구현#include #include #include using namespace std;struct Node{ int y, x; int dist; bool broken; // 벽을 부쉈는지};int N, M;vector> map;vector> directions = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };bool CanMove(int y, int x){ return (y >= 0 && y = 0 && x >> visited(N, vector>(M, vector(2, false))); queue q; q.push({0, 0, 1, false}); visited[0][0][0] = true; whil..
[프로그래머스] 이중우선순위큐(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/42628 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include #include using namespace std;vector solution(vector operations){ // 이중우선순위큐 multiset 이용 std::multiset dq; for (const auto& op : operations) { // 삽입 if (op[0] == 'I') { int ..
[백준] 9663번: N-Queen(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/9663 코드 구현#include #include #include using namespace std;int N;// 현재 행에 다른 퀸이 있는지bool isSameRow(int placedRow, int currentRow){ return placedRow == currentRow;}// 대각선에 다른 퀸이 있는지bool isDiagonal(int placedCol, int placedRow, int currentCol, int currentRow){ // 대각선에 있으면 가로 길이 차이 = 세로 길이 차이 return abs(placedCol - currentCol) == abs(placedRow - currentRow);}// 퀸을..
[프로그래머스] 정수 삼각형(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include using namespace std;int solution(vector> triangle){ int n = triangle.size(); vector> dp(n, vector(n, 0)); // dp 테이블 맨 아랫쪽 초기화 for (int i = 0; i = 0; --i) { for (int j = 0; j 해결 방법거쳐간 숫자의 최댓값을 구..
[프로그래머스] 단어 변환(C++)
·
개발/알고리즘
문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 코드 구현#include #include #include #include using namespace std;bool IsNeighbor(const string& a, const string& b){ // 두 단어를 비교하여 하나만 단어가 다른 경우를 찾음 int diff = 0; for (int i = 0; i 1) return false; } return true;}int solution(string begin..
[백준] 7576번: 토마토(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/7576 코드 구현#include #include #include #include using namespace std;vector> box;int days[1000][1000];queue> q;vector> dir = { {0, -1}, {0, 1}, {-1, 0}, {1, 0} };bool IsValid(int x, int y){ if (x >= 0 && x = 0 && y now = q.front(); q.pop(); for (int i = 0; i > m >> n; box.resize(n); for (int i = 0; i > t; box[i].push_back(t); // 처음부터 익어있는 토마토 큐에 삽입 if ..
[백준] 1967번: 트리의 지름(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/1967 코드 구현#include #include #include using namespace std;vector>> tree;vector visited;int maxDist = 0, farNode = 0;void dfs(int node, int dist){ visited[node] = true; if (dist >= maxDist) { maxDist = dist; farNode = node; } for (const pair pair : tree[node]) { int neighbor = pair.first; int weight = pair.second; if (!visited[neighbor]) { dfs(neighbor..