본문 바로가기

백준13

[그리디 알고리즘] 백준 1715번 문제정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장의 숫자 카드 묶음을 합치려면 50번의 비교가 필요하다.매우 많은 숫자 카드 묶음이 책상 위에 놓여 있다. 이들을 두 묶음씩 골라 서로 합쳐나간다면, 고르는 순서에 따라서 비교 횟수가 매우 달라진다. 예를 들어 10장, 20장, 40장의 묶음이 있다면 10장과 20장을 합친 뒤, 합친 30장 묶음과 40장을 합친다면 (10 + 20) + (30 + 40) = 100번의 비교가 필요하다. 그러나 10장과 40장을 합친 뒤, 합친 50장 묶음과 20장을 합친다면 (10 + 40) + (50 + 20) =.. 2024. 12. 2.
[그리디알고리즘] 백준 11047번 문제준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) 문제분석동전개수의 최솟값을 묻는 질문이므로, 가격이 큰 동전 부터 거슬러서 개수를 구하면 최소 조건이 된다.그리디 탐색 방법으로 , 각각의 시행 시점의 최솟값이 전체 최솟값이 되기에 그리디 탐색방법으로 사용해도 무방하다- 거스름 돈의 입력은 오름차순.. 2024. 11. 27.
[BFS + DFS] 백준 1260번 문제그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다.첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사이에 여러 개의 간선이 있을 수 있다. 입력으로 주어지는 간선은 양방향이다. 문제분석DFS와 BFS를 차례대로 구현하면 된다.주의할점은 정점번호가 작은 것을 먼저 방문하므로, 인접 인덱스를 정렬을 해서 방문할 순서를 정해야.. 2024. 11. 18.
[기수정렬] 백준 10989번 문제오름차순으로 정렬하시오(첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다.) 문제분석입력의 수의 범위가 많으므로, 일반적인 정렬은 선택하는데에 시간초과의 가능성이 존재한다기수 정렬을 이용하여 (O(KN)), 메모리 사용을 주의하며 작성  기수정렬 방식자릿수별로 Queue를 이용하여, 정렬하고 이후 정렬될 숫자의 최대 자릿수만큼 반복하며 정렬하는 방식시간복잡도 : O(KN) , K는 최대 자릿수정렬 수 : 601220453075328899302060 3212  7545  88990123456789일의 자리 정렬 :6020301232457588991220323045607588990123456.. 2024. 11. 14.
[정렬] 백준 1517번 문제버블정렬에 관한 이야기 진행- 인접해 있는 두 수를 swap하며 정렬 진행- (배열 크기 + 배열 제공)- 버블정렬을 진행할 때, swap하는 횟수를 구하는 프로그램을 작성하시오시간 제한 : 1초버블정렬 시간복잡도 : O(N^2)배열 범위 : 1 문제분석버블정렬로 진행할 시, 시간 초과로 인해 swap을 구하더라도 문제에 제시되어있는 시간을 지킬 수가 없다.따라서, O(NlogN)을 가진 정렬하는 방식을 채택해야함(병합 정렬 선택)병합정렬 선택시 주의할점)병합정렬이 swap되는 횟수를 구하는 것이 아닌, 버블정렬이 swap되는 횟수를 구해야함인덱스 위치의 변화를 통한 , 버블정렬의 swap 횟수를 구해야함예시2를 이동시에 5와 6을 뒤로 보내야한다 ( 버블정렬 시 swap되는 항목 )(2,5) , (.. 2024. 11. 13.
[병합 정렬] 백준 2751번 문제- 배열의 크기 N 제공- 배열 제공 ( 개행을 통해 입력 )- 해당 배열을 오름차순으로 정렬(1 문제분석1,000,000이므로 O(NlogN)으로 해결할 수 있는 정렬 방법 탐색- 병합정렬을 이용하여, 정렬 진행  병합정렬 예시순서배열첫번째42 (set1)32 (set2)24 (set3)60 (set4)15 (set5)5 (set6)90 (set7)45 (set8)두번째32 (set1)42 (set1)24 (set2)60 (set2)5 (set3)15 (set3)45 (set4)90 (set4)세번째24( set1)32 (set1)42 (set1)60 (set1)5 (set2)15 (set2)45 (set2)90 (set2)네번째 (정렬)515243242456090set를 작은 단위의 그룹으로 나눈.. 2024. 11. 12.