https://www.acmicpc.net/problem/1967 #include #include #include #define MAX 10001 using namespace std; vectorv[MAX]; bool visited[10001] = {false}; int ans = 0; int endpoint = 0; void dfs(int num, int length){ if(visited[num]){ return; } visited[num] = true; if(ans < length){ ans = length; endpoint = num; } for(int i = 0; i < v[num].size(); i++){ int next = v[num][i].first; int cost = v[num][i]...
https://www.acmicpc.net/problem/2096 2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net #include #define MAX 500000 using namespace std; int dp[MAX][4] = {0}; int dp2[MAX][4] = {0}; int main(){ int N; cin >> N; for(int i = 1; i dp[i][j]; } } for(int i = 1; i
https://www.acmicpc.net/problem/2263 위 그림으로 예시를 들어보자. 전위 순회를 했을 경우 1 2 3 4 5 6 7 중위 순회를 했을 경우 3 2 4 1 6 5 7 후위 순회를 했을 경우 3 4 2 6 7 5 1 중위 순회를 배열로 나타냈을 경우 root의 위치는 가운데에 있다. 1을 기준으로 왼쪽을 바라봤을 때 3 2 4는 가운데 2를 부모노드로 다시 한 번 왼쪽과 오른쪽을 나누고있다 1을 기준으로 오른쪽을 바라봤을 때 5가 부모노드이며 왼쪽과 오른쪽을 나눈다. 후위 순회를 배열로 나타낸 경우에는 루트가 마지막 인덱스에 자리잡고 있다. 왼쪽은 다시 한번 2가 루트노드가 될 것이고 오른쪽은 5가 루트노드가 될 것이다. 마지막 인덱스가 루트노드인 것을 이용하여 코드를 짜보도록 ..
https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net #include #include using namespace std; int map[1001][1001]; int visited[1001][1001][2]; int dy[4] = {1, -1, 0, 0}; int dx[4] = {0, 0, -1, 1}; int N; int M; int bfs(){ queue q; q.push(make_pair(make_pair(0, 0),..
https://www.acmicpc.net/problem/1504 1504번: 특정한 최단 경로 첫째 줄에 정점의 개수 N과 간선의 개수 E가 주어진다. (2 ≤ N ≤ 800, 0 ≤ E ≤ 200,000) 둘째 줄부터 E개의 줄에 걸쳐서 세 개의 정수 a, b, c가 주어지는데, a번 정점에서 b번 정점까지 양방향 길이 존 www.acmicpc.net #include #include #include #define INF 100000000 using namespace std; vector a[801]; int dist[801]; int N; int E; void dijkstra(int start){ for(int i = 0; i ncost + cost){ dist[next] = ncost + cost;..