본문 바로가기
728x90

정렬22

[10989] 수 정렬하기 3 (JAVA) # 문제 설명 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. # 정답 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Stri.. 2024. 3. 28.
[2751] 수 정렬하기 2 (JAVA) # 문제 설명 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. 출력 첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다. # 정답 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReade.. 2024. 3. 28.
[11004] K번째 수 (JAVA) # 문제 설명 수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다. 둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109) 출력 A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다. # 정답 코드 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStrea.. 2024. 3. 28.
Day-7 계수 정렬 1. 계수 정렬 데이터가 몇 번 나왔는지 세어 정렬하는 방식이다. 시간 복잡도가 O(n)으로 매우 빠르다. 수의 범위가 클수록 메모리 낭비가 심하다. 2. 계수 정렬 과정 각 데이터가 나온 횟수를 count array에 저장한다. count array의 누적합 배열을 만든다. 누적합 배열을 이용하여 정렬된 배열을 만든다. 3. 예제 문제 [2750] 수 정렬하기 (JAVA) # 문제 설명 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 spicyrisotto.tistory.com 2024. 3. 27.
Day-7 기수 정렬 1. 기수 정렬 값을 비교하지 않는다. 데이터의 자릿수를 비교해 정렬하는 방식이다. 시간 복잡도는 O(kn)이다. k는 데이터의 자릿수이다. 시간 복잡도가 가장 짧은 정렬로 데이터의 개수가 많을 때 좋다. 2. 기수 정렬 과정 기수 정렬은 10개의 큐를 이용한다. 각 큐는 값의 자릿수를 대표한다. 일의 자릿수를 기준으로 데이터를 큐에 넣는다. 그 다음 0번째 큐부터 9번째 큐까지 pop한다. 위 과정을 마지막 자릿수까지 반복한다. 3. 예제 문제 [10989] 수 정렬하기 3 (JAVA) # 문제 설명 N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. spi.. 2024. 3. 27.
Day-7 병합 정렬 1. 병합 정렬 분할 정복 방식을 사용해 데이터를 분할하고 분할한 집합을 합치며 정렬하는 방식이다. 평균 시간 복잡도는 O(nlogn)이다. 2. 병합 정렬 과정 최초에는 8개의 집합으로 나눈다. 2개씩 집합을 합치며 오름차순 정렬한다. (42)와 (32)가 합쳐져 (32, 42)로 정렬된다. 이와 같은 과정을 집합이 하나가 될 때까지 반복하면 된다. 3. 그룹 병합 과정 자세한 병합 과정은 위 그림과 같다. (24, 32, 42, 60)과 (5, 15, 45, 90) 두 집합을 병합하는 과정이다. 집합의 최소값을 가리키는 포인터를 각각 생성한다. 포인터가 가리키는 값을 비교하여 더 작은 값을 결과 배열에 추가한다. 4. 예제 문제 [2751] 수 정렬하기 2 (JAVA) # 문제 설명 N개의 수가 주어.. 2024. 3. 27.
[24060] 알고리즘 수업 - 병합 정렬 1 (JAVA) # 문제 설명 오늘도 서준이는 병합 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 병합 정렬로 배열 A를 오름차순 정렬할 경우 배열 A에 K 번째 저장되는 수를 구해서 우리 서준이를 도와주자. 크기가 N인 배열에 대한 병합 정렬 의사 코드는 다음과 같다. merge_sort(A[p..r]) { # A[p..r]을 오름차순 정렬한다. if (p < r) then { q 2024. 3. 27.
Day-6 퀵 정렬 1. 퀵 정렬 기준값(pivot)을 선정해 해당 값을 기준으로 정렬하는 방식이다. 기준값 선정 방식이 시간 복잡도에 많은 영향을 준다. 평균 시간 복잡도는 O(nlogn)이다. pivot을 중심으로 작은 데이터와 큰 데이터로 나누면서 정렬한다. 2. 퀵 정렬 과정 pivot을 설정 pivot을 기준으로 다음 과정을 거쳐 데이터를 2개의 집합으로 분리 - start가 pivot보다 작으면 start 1 증가 - end가 pivot보다 크면 end 1 감소 - start가 pivot보다 크고 end가 pivot보다 작으면, start와 end를 swap하고 start 1 증가, end 1 감소 - start와 end가 만날 때까지 반복 - start와 end가 만나면 pivot을 삽입. 만난 지점의 값보다 .. 2024. 3. 27.
[24090] 알고리즘 수업 - 퀵 정렬 1 (JAVA) # 문제 설명 오늘도 서준이는 퀵 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자. N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 퀵 정렬로 배열 A를 오름차순 정렬할 경우 배열 A에 K 번째 교환되는 수를 구해서 우리 서준이를 도와주자. 크기가 N인 배열에 대한 퀵 정렬 의사 코드는 다음과 같다. quick_sort(A[p..r]) { # A[p..r]을 오름차순 정렬한다. if (p < r) then { q 2024. 3. 27.
728x90