[백준] 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으로 ..
[백준] 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..
[백준] 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);}// 퀸을..
[백준] 16236번: 아기 상어(C++)
·
개발/C++
문제 링크https://www.acmicpc.net/problem/16236 코드 구현#include #include #include #include #include using namespace std;int n;vector> space;vector> dirs = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} };bool canMove(int y, int x, int sharkSize){ // 박스 범위 내에 있고 물고기의 크기가 상어 크기와 같거나 작은지 if (y >= 0 && y = 0 && x & a, const tuple& b) { // 거리 우선 if (get(a) != get(b)) return get(a) > get(b); // y 우선 if (get(a) != g..
[백준] 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..
[백준] 회의실 배정(C++)
·
개발/알고리즘
문제링크https://www.acmicpc.net/problem/1931 코드 구현#include #include #include using namespace std;int main(){ int N; cin >> N; vector> meetings(N); for (int i = 0; i > meetings[i].first >> meetings[i].second; } // 끝나는 시간 기준 오름차순 정렬 sort(meetings.begin(), meetings.end() , [](pair& a, pair& b){ if (a.second == b.second) return a.first = last_end_time) { ..
[백준] 평범한 배낭( C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/12865 코드 구현#include #include #include using namespace std;int main(){ int N, K; cin >> N >> K; // dp[w] = 무게가 w일 때의 최대 가치 vector dp(K + 1, 0); for (int i = 0; i > weight >> value; for (int w = K; w >= weight; --w) { // 넣지 않는 경우 / 넣는 경우 dp[w] = max(dp[w], dp[w - weight] + value); } } cout 해결 방법동적 해결법 dp 배열을 사용하여 최대 무게 K에서의 최대 가치를 배열에 저장하였다. 입력 받은 아이템..
[백준] 노드사이의 거리(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/1240 코드 구현#include #include #include using namespace std;vector visited;int answer = 0;void dfs(int _node, int _end, int _dist, const vector>& tree){ if (_node == _end) { answer += _dist; return; } for (int i = 0; i > N >> M; vector> tree(N, vector(N)); visited.resize(N); for (int i = 0; i > node1 >> node2 >> dist; tree[node1 - 1][node2 - 1] = dist; tree..
[백준] RGB거리(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/1149 코드 구현#include #include #include #include using namespace std;int main(){ int n; cin >> n; vector> rgbCost(n, vector(3)); vector> curCost(n, vector(3)); for (int i = 0; i > rgbCost[i][j]; } } curCost[0][0] = rgbCost[0][0]; curCost[0][1] = rgbCost[0][1]; curCost[0][2] = rgbCost[0][2]; for (int i = 1; i 해결 방법현재까지의 총 비..
[백준] 스타트와 링크(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/14889 코드 구현#include #include using namespace std;vector> Stats;int minValue = 100;bool selected[20];int Diff(){ int diff; int S = 0, L = 0; // selected 에서 true 면 스타트 팀, false 면 링크 팀 for (int i = 0; i 0) ? diff : -diff; return diff;}// idx : 현재 팀원, count : 팀원 수void Backtrack(int idx, int count){ // 팀원 수는 전체 인원의 절반 if (count == Stats.size() / 2) { // 팀이 만들어졌..
[백준] 2606번: 바이러스(C++)
·
개발/알고리즘
문제 링크https://www.acmicpc.net/problem/2606 코드 구현#include #include #include #include using namespace std;unordered_map> adjList;unordered_set visited;void dfs(int node){ // 방문 체크 visited.insert(node); for (const int& neighbor : adjList[node]) { // 방문하지 않은 컴퓨터인 경우 dfs() 재귀 호출 if (visited.find(neighbor) == visited.end()) { dfs(neighbor); } }}int solution(int _computerCount, int _pairCount)..