https://school.programmers.co.kr/learn/courses/30/lessons/42748
[문제 풀이 고민]
1. command에서 i,j,k를 하나씩 저장함
2. i ~ j까지 자른 배열을 저장
3. 자른 배열을 새로 재정렬
4. 재정렬한 배열에서 k번째 수를 뽑아서 answer에 저장
import java.util.*;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] answer = new int[commands.length];
for(int a = 0; a < commands.length; a++){
int i = commands[a][0];
int j = commands[a][1];
int k = commands[a][2] - 1;
//새로 정렬할 배열의 길이 계산
int position = j - i + 1;
//i ~ j 까지의 길이를 저장하기 위한 배열
int[] arr = new int[position];
//0부터 저장하기 위한 숫자
int c = 0;
//i ~ j 까지 저장
for(int b = i; b < j - i; b++){
arr[c] = array[b];
c++;
}
//정렬
Arrays.sort(arr);
//k번째 있는 수를 저장
answer[a] = arr[k];
}
return answer;
}
}
https://school.programmers.co.kr/learn/courses/30/lessons/42746
[문제 풀이 고민]
(출력) 배열을 재배치해서 만들 수 있는 가장 큰 수를 문자열로 바꾸어 리턴
import java.util.Arrays;
class Solution {
public String solution(int[] numbers) {
String[] arr = new String[numbers.length];
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(numbers[i]);
}
//큰 수가 먼저 올 수 있도록
Arrays.sort(arr ,(o1, o2) -> (o2 + o1).compareTo(o1 + o2));
if(arr[0].equals("0"))
return "0";
StringBuffer answer = new StringBuffer();
for(int i = 0; i < arr.length; i++){
answer.append(arr[i]);
}
return answer.toString();
}
}
[주의]
1. (o2 + o1).compareTo(o1 + o2)와 (o1 + o2).compareTo(o2 + o1)의 차이
o1이 "3"이고 o2가 "30"이라면,
(o2 + o1).compareTo(o1 + o2)은 "330"이 "303"보다 크다고 판단하고,
(o1 + o2).compareTo(o2 + o1)은 "330"이 "303"보다 작다고 판단
https://school.programmers.co.kr/learn/courses/30/lessons/42747
문제 풀이 고민 과학자의 H-Index를 리턴
H-Index : 발표한 논문n편 중, h번 이상 인용된 눈문이 h편 이상이고 나머지 논문이 h번 이하 인용 되었다면 h의 최댓값이 결과
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int answer = 0;
//과학자의 논문 인용 높은 순
Arrays.sort(citations);
for(int i = 0; i < citations.length; i++){
int h = citations.length - i;
if(citations[i] >= h){
answer = h;
break;
}
}
return answer;
}
}
-> 처음에 문제 이해가 안되서 이상한 방향으로 풀고 있었다.