목록[c언어&c++] 알고리즘 공부/개념 (18)
아무거나 내꺼 공부할래
▣ 문제 방향그래프가 주어지면 1번 정점에서 N번 정점으로 가는 모든 경로의 가지 수를 출력하는 프 로그램을 작성하세요. 아래 그래프에서 1번 정점에서 5번 정점으로 가는 가지 수는 총 6 가지입니다. ▣ 입력설명 - 첫째 줄에는 정점의 수 N(1 3 -> 4 map[2] -> 1 -> 3 -> 5 map[3] -> 4 -> -> map[4] -> 2 -> 5 -> 5 map[5] -> -> -> adj[n]은 연결리스트의 구조와 비슷하다고 생각하면 된다. n번 정점과 연결된 노드들을 배열로써 표현할 수 있다. 이때 사용하는 함수는 .push_back(int v)이다. 이 함수를 통해서 뒤에 노드를 계속 붙일수 있다. .size()함수는 해당 인접리스트에 얼마나 많은 노드들이 연결되어 있는지를 알려준다...
▣ 입력설명 - 아래 그림과 같은 그래프 정보를 인접행렬로 표현해보세요. ▣ 입력설명 - 첫째 줄에는 정점의 수 N(1
▣ 문제 - N개이 숫자가 입력되면 오름차순으로 정렬하여 출력하는 프로그램을 작성하세요. 정렬하는 방법은 병합정렬입니다. ▣ 입력설명 - 첫 번째 줄에 자연수 N(1
▣ 입력설명 - K진수 출력 10진수 N이 입력되면 K진수로 변환하여 출력하는 프로그램을 작성하세요. 스택 자료구조를 사 용하시기 바랍니다. ▣ 입력설명 - 첫 번째 줄에 10진수 N(10= 0; i--) { printf("%d", pop()); } return 0; }
▣ 입력설명 입력 예시과 같이 9 × 9 격자판에 쓰여진 81개의 자연수가 주어질 때, 각 행의 평균을 구하고, 그 평균과 가장 가까운 값을 출력하는 프로그램을 작성하세요. 평균은 소수점 첫 째 자리에서 반 올림합니다. 평균과 가까운 값이 두 개이면 그 중 큰 값을 출력하세요. ▣ 입력설명 - 첫 째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 자연수가 주어진다. 주어지는 자연수는 100보 다 작다. ▣ 출력설명 - 첫째 줄에 첫 번째 줄부터 각 줄에 각행의 평균과 그 행에서 평균과 가장 가까운 수를 출력한다. ▣ 입력 예시 3 23 85 34 17 74 25 52 65 10 7 39 42 88 52 14 72 63 87 42 18 78 53 45 18 84 53 34 28 64 85 12 16 75 3..
▣ 문제 지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다. ▣ 입력설명 - 첫 줄에 자연수 N이 주어진다.(1
▣ 입력설명 임의의 N개의 숫자가 입력으로 주어집니다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한 개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요. ▣ 입력설명 - 첫 줄에 한 줄에 자연수 N(3 0 1 2 3 4, lt 5, mid 6 7, rt 12 23 32 57 65 81 87 99 만약 m보다 작다면 반드시 num[mid]보다 왼쪽에 있기 때문에 rt를 mid-1의 자리로 바꿔준다 0, lt 1, mid 2,rt 3 4 5 6 7 12 23 32 57 65 81 87 99 num[mid]가 m과 같을때 break문을 걸어주고 출력값은 배열의 위치 이기 때문에 mid+1이 된다.
▣ 문제 N개이 숫자가 입력되면 오름차순으로 정렬하여 출력하는 프로그램을 작성하세요. 정렬하는 방법은 삽입정렬입니다. ▣ 입력설명 - 첫 번째 줄에 자연수 N(1 temp) num[j + 1] = num[j]; else break; } num[j + 1] = temp; } for (i = 0; i < n; i++) { printf("%d ", num[i]); } return 0; } 삽입 정렬이 선택, 버블, 삽입 정렬중에서 가장 문제에서 출제 빈도가 높다. 삽입 정렬은 i번째의 수를 temp에 저장시키고 뒤에서 앞으로 숫자를 비교해가면서 정렬하는 방법이다. 삽입 정렬의 경우 평균적인 시간 복잡도는 O(N^2)이지만 최적의 경우에는 O(N)이다.