K번째 수 찾기 알고리즘
문제 설명
배열의 특정 구간을 자르고, 그 구간을 정렬한 후, 정렬된 배열의 K번째 숫자를 찾는 문제입니다. 이를 통해 주어진 조건에 맞는 수를 구하는 과정을 연습할 수 있습니다.
예를 들어, 주어진 배열이 [1, 5, 2, 6, 3, 7, 4]
이고, 명령어가 [[2, 5, 3], [4, 4, 1], [1, 7, 3]]
인 경우를 살펴보겠습니다.
첫 번째 명령어:
[2, 5, 3]
- 배열의 2번째부터 5번째까지 자르면
[5, 2, 6, 3]
입니다. - 이 배열을 정렬하면
[2, 3, 5, 6]
이 됩니다. - 3번째 숫자는 5입니다.
- 배열의 2번째부터 5번째까지 자르면
두 번째 명령어:
[4, 4, 1]
- 배열의 4번째부터 4번째까지 자르면
[6]
입니다. - 정렬 후 1번째 숫자는 6입니다.
- 배열의 4번째부터 4번째까지 자르면
세 번째 명령어:
[1, 7, 3]
- 배열의 1번째부터 7번째까지 자르면
[1, 5, 2, 6, 3, 7, 4]
입니다. - 정렬 후 3번째 숫자는 3입니다.
- 배열의 1번째부터 7번째까지 자르면
위와 같은 과정을 통해, 최종적으로 구해진 결과는 [5, 6, 3]
입니다.
제한사항
- 배열의 길이는 1 이상 100 이하입니다.
- 배열의 각 원소는 1 이상 100 이하입니다.
- 명령어의 길이는 1 이상 50 이하입니다.
- 명령어의 각 원소는 길이가 3입니다.
코드 구현
아래는 이 문제를 해결하기 위한 Java 코드입니다.
package lv1.k번째수;
import java.util.Arrays;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for(int loop_cnt = 0; loop_cnt < commands.length; loop_cnt++) {
int i = commands[loop_cnt][0];
int j = commands[loop_cnt][1];
int k = commands[loop_cnt][2];
int[] slicedArr = Arrays.copyOfRange(array, i-1, j);
Arrays.sort(slicedArr);
answer[loop_cnt] = slicedArr[k-1];
}
return answer;
}
public static void main(String[] args) {
var main = new Solution();
int[] a = {1, 5, 2, 6, 3, 7, 4};
int[][] b = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};
System.out.println(Arrays.toString(main.solution(a, b))); // 출력: [5, 6, 3]
}
}
코드 설명
배열과 명령어를 받는 메서드:
solution
메서드는 배열과 2차원 명령어 배열을 매개변수로 받습니다.명령어를 반복 처리: 각 명령어를 순회하면서 i번째부터 j번째까지의 부분 배열을
Arrays.copyOfRange
메서드를 사용해 잘라냅니다.정렬 및 K번째 숫자 추출: 잘라낸 배열을 정렬한 후, K번째 숫자를 추출하여 결과 배열에 저장합니다.
결과 반환: 최종적으로 모든 명령어에 대한 K번째 숫자를 담은 배열을 반환합니다.
결론
이 문제는 배열의 특정 구간을 자르고 정렬한 후 K번째 숫자를 찾는 간단한 알고리즘을 통해, 배열 처리 및 정렬의 기초를 배울 수 있는 좋은 예제입니다. Java의 다양한 배열 및 정렬 메서드를 활용하여 간결하게 구현할 수 있습니다.
이와 같은 문제를 통해 기본적인 알고리즘 사고를 키우고, 실제 코딩 인터뷰나 알고리즘 대회에서 필요한 기초를 다질 수 있습니다.
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[프로그래머스] 문자열 내마음대로 정렬하기 (3) | 2024.10.16 |
---|---|
[프로그래머스] 푸드 파이트 대회 (1) | 2024.10.16 |
[프로그래머스] 숫자 문자열과 영단어 (0) | 2024.10.16 |
[프로그래머스] 가장 가까운 같은 글자 (0) | 2024.10.16 |
[프로그래머스] 시저암호 (0) | 2024.10.16 |