프로그래머스 K번째 수
일단 문제를 코드로 간단화 시켜보자
public static void main(String[] args) {
int[] array = {1, 5, 2, 6, 3, 7, 4}; //원본배열
int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}}; // 명령내릴 배열
int i = commands[0][0]-1; // i번째
int j = commands[0][1]-1; // j번째
int k = commands[0][2]-1; // k번째
int[] b = Arrays.copyOfRange(array,i,j); //핵심코드
Arrays.sort(b); //정렬
System.out.println(b[k]);// answer 배열에 저장할 K번째 숫자답
왜 i,j,k의 -1을 해주었냐면 배열은 0부터 시작이기 때문에 그렇다.
잘 돌아가는 것을 확인할 수 있다. 다만 큰 문제는 첫번째는 잘 돌아가지만
Arrays.copyOfRange(array,3,3) 이렇게 되면 6이 나와야하지만
인덱스에 들어가질 않는다 3,3번째 자리면 3이 나와야하는데 왜 안될까
copyOfRange는 끝자리까지 이기 때문에 안되는것이다. +1을 해주면 잘된다.
import java.util.*;
public class kNumber {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
List<Integer> answer1 = new ArrayList<>();
for(int i = 0;i<commands.length;i++) {
for (int j = 0; j < commands[i].length; j++) {
list.add(commands[i][j] - 1);
}
int[] b = Arrays.copyOfRange(array,list.get(0),list.get(1)+1);
Arrays.sort(b);
answer1.add(b[list.get(2)]);
list.clear();
}
int[] answer = answer1.stream().mapToInt(Integer::intValue).toArray();
System.out.println();
}
}
최종 코드 answer를 integer > int 배열로 바꿔주는 것만 넣어주면 쉽게 풀린다.
Author And Source
이 문제에 관하여(프로그래머스 K번째 수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sokojh/프로그래머스-K번째-수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)