목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/1922 1922번: 네트워크 연결 이 경우에 1-3, 2-3, 3-4, 4-5, 4-6을 연결하면 주어진 output이 나오게 된다. www.acmicpc.net 풀이 최소 스패닝 트리를 구하는 문제 -> 크루스칼 알고리즘 사용 크루스칼? 연결 비용을 오름차순으로 정렬하여 가장 적은 비용부터 사용함 두 노드가 같은 그룹에 속하지 않았을 때 이어주는 간선을 사용하여 비용을 증가시킴 코드 #include #include #include #include using namespace std; vector Com; int R[1001]; int Find(int n) { if (R[n] == n) return n; return Find(R[n]); } vo..
https://www.acmicpc.net/problem/11403 11403번: 경로 찾기 가중치 없는 방향 그래프 G가 주어졌을 때, 모든 정점 (i, j)에 대해서, i에서 j로 가는 경로가 있는지 없는지 구하는 프로그램을 작성하시오. www.acmicpc.net 풀이 모든 정점의 경로를 구해야 하므로 플로이드-워셜 알고리즘을 사용했다.또한 방향 그래프이므로 출발-중간-도착으로의 경로가 모두 존재해야 경로가 있다고 판단한다. 코드 #include int main() { int N, A[100][100]; scanf("%d", &N); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) scanf("%d", &A[i][j]); } // Floyd -..
https://www.acmicpc.net/problem/2747 2747번: 피보나치 수 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 풀이 DP를 이용하여 피보나치 수를 구현하였고, 초기값이 입력으로 들어올 경우를 따로 계산해주었다. 코드 #include int main() { int f0 = 0, f1 = 1, fn; int n; scanf("%d", &n); if (!n) fn = 0; else if (n == 1) fn = 1; else { for (int i = 2; i
https://www.acmicpc.net/problem/2312 2312번: 수 복원하기 첫째 줄에 테스트 케이스의 수가 주어진다. 각 테스트 케이스마다 양의 정수 N (2 ≤ N ≤ 100,000)이 주어진다. www.acmicpc.net 풀이 에라토스테네스의 체를 활용하여 10만까지의 소수를 구하고, N이 들어올 때마다 소인수분해를 하였다. 코드 #include #include using namespace std; vector Prime; void Get_Prime() { bool A[100001] = { 0, }; int i, j, mul; for (i = 2; i
https://www.acmicpc.net/problem/1237 1237번: 정ㅋ벅ㅋ 우주를 정ㅋ벅ㅋ할 사람에게는 예제 입력과 예제 출력이 필요하지 않다. www.acmicpc.net 풀이 첫째 줄에 문제의 정답을 출력한다. 전 11번 째에 맞췄습니다...ㅋㅋㅋㅋ 코드 #include int main(){ printf("문제의 정답"); return 0; }
https://www.acmicpc.net/problem/1267 1267번: 핸드폰 요금 동호가 저번 달에 이용한 통화의 개수 N이 주어진다. N은 20보다 작거나 같은 자연수이다. 둘째 줄에 통화 시간 N개가 주어진다. 통화 시간은 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 코드 #include int main() { int N, n, Y = 0, M = 0; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d", &n); Y += 10 * (n / 30 + 1); M += 15 * (n / 60 + 1); } if (Y < M) printf("Y %d", Y); else if (Y == M) printf("Y M %d", ..
https://www.acmicpc.net/problem/1233 1233번: 주사위 지민이는 주사위 던지기 게임을 좋아하여 어느 날 옆에 있는 동호를 설득하여 주사위 던지기 게임을 하자고 하였다. 총 3개의 주사위가 있다. 그리고 이 주사위는 각각 S1(2 ≤ S1 ≤ 20), S2(2 ≤ S2 www.acmicpc.net 풀이 각 주사위에서 나올 수 있는 숫자만큼 반복문을 실행하여 해당 숫자 값이 나올 때 횟수를 증가시켜줌. 코드 #include int main() { int s1, s2, s3, max = 0, max_i = 0; int cnt[81] = { 0, }; scanf("%d %d %d", &s1, &s2, &s3); for (int i = 1; i
https://www.acmicpc.net/problem/1075 1075번: 나누기 첫째 줄에 N, 둘째 줄에 F가 주어진다. N은 100보다 크거나 같고, 2,000,000,000보다 작거나 같은 자연수이다. F는 100보다 작거나 같은 자연수이다. www.acmicpc.net 풀이 뒤의 두 자리 수만 바꾸는 것이므로 최악의 경우에도 100번밖에 실행되지 않는다. 가장 작은 값을 구하고자 하기에 입력 받은 수에서 뒷 두 자리를 00으로 바꾼 후 수를 증가시키며 나머지가 0인 수를 찾았다. 코드 #include int main() { int N, F, start, i; scanf("%d %d", &N, &F); start = (N / 100) * 100; for (i = 0; i < 100; i++) ..