본문 바로가기

개발 서적 리뷰/DoIt 알고리즘 코딩테스트26

[병합 정렬] 백준 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.
[퀵 정렬] 백준 11004번 문제- Array를 오름차순 정렬했을 때 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오- 데이터 개수 ( 1 - K번째 수 ( 1  문제 분석시간 제한 2초 : 2억번 연산 내에 구현(NlogN 일경우, 시간제한에 있어서는 통과할 시간복잡도이다)- 오름차순 정렬이 필요하므로, 퀵정렬을 이용한 풀이를 진행pivot 정하는 방법pivot == k : k 번째 수를 찾은 것이므로 알고리즘을 종료pivot > k : pivot의 왼쪽 부분에 K가 있으므로 왼쪽 (S ~ pivot -1) 만 정렬을 수행한다pivot 퀵정렬은 pivot이 지정되있는 곳이 정렬된 숫자이다 슈도 코드N(숫자의 개수) K(K번째 수)A(숫자 데이터 저장 배열)for(N만큼 반복하기){ 배열 저장하기}퀵소트 실행K번째 데.. 2024. 11. 12.
[삽입정렬] 백준 11399번 문제1. ATM 기 한 개가 있고, 손님들이 각자 업무를 보는 시간이 주어진다2. 모든 손님들의 서비스를 합한 시간의 최소값을 구해라(사람의 수  : 1 (사람 당 서비스 시간 :  1 * 시간제한 : 1초 문제분석1. 가장 빠른 시간에 인출하는 방법을 그리디 방식이라고 한다.2. 시간제한은 1초 이므로, O(N^2) 이하인 정렬 알고리즘 아무거나 사용하면 된다3. 정렬 이후 서비스 시간을 합정렬을 이용하여, 최소값 구함그리디 방식? - 그리디 방식이란 탐욕법으로서 가장 최적의 해를 구하는 것을 목표하는 알고리즘이다. - 현재 문제에서는, 앞에 있는 손님들의 서비스 시간을 더해야하므로 반복적으로 더해지는 서비스 시간이 적어야한다 - 따라서, 그리디 방식을 적용하여 서비스 시간의 최적의 해를 도출해야한다 .. 2024. 11. 10.
[선택정렬] 백준 1427번 문제1번째 줄에 정렬할 수 N이 주어진다.N은 1,000,000,000 보다 작거나 같은 자연수다(주어진 N을 내림차순으로 정렬하시오) 문제분석- 자연수를 받아서, 정렬하는 문제이므로 먼저 숫자를 배열로 넣어야한다ex) 2143 -> 2,1,4,3 (분리필요)- 선택 정렬을 이용하여 문제풀이 진행과정빨간색 : 정렬된 수파란색 : 정렬해야하는 범위순서과정첫번째4123두번째4321세번째4321 슈도코드N(정렬할 수 입력)arr(N을 분리하여 배열로 저장)for(i=0 ~ arr 크기만큼 반복){ for(j= i ~ arr 크기만큼반복){ 현재 범위에서 최대 인덱스값 찾기 } if (현재 i값과 maxIdx값이 다르면){ swap (arr[i], arr[maxIdx]) }}.. 2024. 11. 9.
[버블정렬] 백준 1377번 문제bool change = false;for (int =1; i a[j+1] ){ change = true; swap(a[j], a[j+1]); } } if(change == false){ cout 위 버블 소트를 구현한 c++ 코드의 의도를 구하는 문제1. 1번째 줄에 N이 주어진다( 1 2. 2번째 줄부터 N개의 줄에 A[1] ~ A[N] 까지 1개씩 주어진다( 0 3. 시간제한 2초 문제 분석최대 500,000개까지 배열의 개수가 정해질 수 있으므로 O(N^2)일 경우 시간초과가 나게 된다 (버블 정렬은 시간복잡도가 O(N^2)이므로, 최대 개수는 10,000 이다 - 1초에 1억번 연산)[해결방법]1. 문제에서는 버블정렬.. 2024. 11. 8.
[버블정렬] 백준 2750번 문제N개의 수가 주어졌을 때, 이를 오름차순 정렬하는 프로그램을 작성하시오.- 1번째 줄에 수의 개수 N (1 - 2번째 줄부터 N개의 줄에 숫자가 주어짐- 수는 중복되지 않는다 문제 분석하기숫자 범위가 1,000으로 매우 작기 때문에, O(N^2) 시간복잡도 알고리즘을 사용해도 문제 없음버블정렬 알고리즘을 이용하여 문제풀이 슈도코드N(정렬할 수 개수)A(정렬할 배열 선언)for(i : 0~N -1){ for(j : 0 ~ N -1 -i) { 현재 A배열의 값보다 1칸 오른쪽 배열의 값이 더 작으면 두 수 바꾸기 }}A 배열 출력 구현import java.io.BufferedReader;import java.io.InputStreamReader;public class App .. 2024. 11. 7.