목록알고리즘 (272)
쌓고 쌓다

모든 노드에서 모든 노드의 최단 경로를 구할 때 사용 양의 가중치와 음의 가중치 모두 사용 가능 하지만 음의 가중치 일 경우 사이클이 없어야함. 기본 초기화 방법 V : 정점의 개수 E : 간선의 개수 arr[i][j] : i에서 j로 가는 비용 int V, E; int arr[101][101]; int a, b, c; cin >> V >> E; for (int i = 0; i > a >> b >> c; // a에서 b로 다닐수 있는 비용 c인 길 arr[a][b] = c; arr[b][a] = c; } 이렇게 처음에 정점의 개수와 간선의 개수를 입력받고 간서의 개수만큼 a b c 를 입력 받는다( a에서 b로 다닐 수 있는 비용 c인 길 ) 위의 코드는 양방향으로 길을 놓..
https://www.acmicpc.net/problem/1956 1956번: 운동 첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의 www.acmicpc.net #include #include using namespace std; int V, E; int arr[401][401]; int res = 987654321; int main(void) { int a, b, c; cin >> V >> E; for (int i = 0; i > a >> b >> c; arr[a][b] = c; } for..
https://www.acmicpc.net/problem/16194 16194번: 카드 구매하기 2 첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000) www.acmicpc.net #include #include using namespace std; int arr[10001]; int dp[10001]; int N; int main(void) { cin >> N; for (int i = 1; i > arr[i]; for (int i = 1; i
https://www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net #include #include using namespace std; int N; int dp[1000001]; int before[1000001]; int main(void) { cin >> N; dp[1] = 0; //1을 만들기위해선 아무 연산을 안해도 됨. before[1] = 0; for ( int i = 2; i dp[i/3]+1) { dp[i] = dp[i / 3] + 1; before[i] = i / 3; } if (i % 2 == 0 && dp[i] > dp[i / 2] + 1) { d..
https://www.acmicpc.net/problem/1926 1926번: 그림 어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로 www.acmicpc.net #include #include #include using namespace std; queue q; int N, M; int arr[500][500]; bool visit[500][500]; int side[4][2] = { {-1,0},{1,0},{0,-1},{0,1} }; int cnt = 0, area = 0; void solve() { for(int i=0;i= 0 && ny >= 0 && n..
https://www.acmicpc.net/problem/2210 2210번: 숫자판 점프 111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다. www.acmicpc.net #include #include #include using namespace std; string arr[5][5]; bool visit[1000000]; int side[4][2] = { {-1,0},{1,0},{0,-1},{0,1} }; int res = 0; void DFS(int y, int x, int cnt, string str) { if (c..
https://www.acmicpc.net/problem/17472 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net #include #include #include #include #include using namespace std; queue q; // 넘버링에 BFS 쓸것이므로 큐 필요 vector v; // 땅이면 모두 담음 vector bridge; // 모든 다리 간선을 담을것 int arr[10][10]; // 입력 받은 배열 int parent[7]; // 부모..
https://www.acmicpc.net/problem/18111 18111번: 마인크래프트 팀 레드시프트는 대회 준비를 하다가 지루해져서 샌드박스 게임인 ‘마인크래프트’를 켰다. 마인크래프트는 1 × 1 × 1(세로, 가로, 높이) 크기의 블록들로 이루어진 3차원 세계에서 자유롭게 www.acmicpc.net 모든 높이 ( 0~256 )에 대해 브루트 포스를 진행해도 정답은 처리가 되는 거 같습니다. 입력받은 최소높이~최대높이에 대해 땅 고르기 작업을 진행해서 최소 시간과 높이를 구하면 됩니다. 먼저 solve함수에서 만들 높이에 대해 높은 땅을 먼저 깎아주고 깎은 블럭 개수만큼 인벤토리에 담고, 시간을 더해줍니다. 그리고 높이에 대해 낮은 땅들을 올려주는 작업을 해주면 됩니다. 이에 남은 블럭이 0..