보라코딩

프로그래머스 자바 :: 정렬 본문

프로그래머스 (java)

프로그래머스 자바 :: 정렬

new 보라 2023. 12. 4. 20:16

이번주는 정렬 3문제

 

 

K번째 수

 

 

 

 

내 풀이

 

copyOfRange를 알아서 쉬웠다!

import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
              
        int[] answer = new int[commands.length]; 

        for (int i = 0; i < commands.length; i++){
            int[] copyArr = Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
            
            Arrays.sort(copyArr);
            answer[i] = copyArr[commands[i][2]-1]; 
        }
        
        return answer;
    }
}

 

 

 


 

가장 큰 수

 

 

 

 

내 풀이

 

혼자서 풀진 못했다.

처음엔 정렬하면 되지~ 했는데 10이랑 3중에 3이 더 크게 인식되어야해서 문제 발생..

 

int 배열을 string으로 변경하고

두개를 이어 붙인 것을 문자열로 비교

 

compareTo 메서드는 Java에서 Comparable 인터페이스를 구현한 클래스에서 제공되는 메서드

 

또, answer += .. 를 사용하면 계속 새로운 것을 생성하니까

기존에 붙일 수 있게 StringBuilder 사용!

 

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        
        //String으로 변환!
        String[] arr = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++){
            arr[i] = String.valueOf(numbers[i]);
        }
        
        // 두 숫자를 앞, 뒤로 번갈아가며 이어붙인 것을 기준으로 비교
        Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
        
        // 0 일때!
        if (arr[0].equals("0")) {
           return "0";
        }
        
        StringBuilder builder = new StringBuilder();

        for(String a : arr){
            builder.append(a);
        }         
        
        return builder.toString();
    }
}

 

 

 


H-index

 

 

 

 

 

 

 

 

내 풀이

 

처음엔 문제를 제대로 이해 못하고

정렬과 이중for문을 통해 풀었다.

 

코드 실행 시에는 정답인데 제출하면 하나만 맞아서 당황..

다른 풀이를 보니 방식을 찾으면 코드 자체는 엄청 심플하다...!

정렬을 했기 때문에 아래와 같이 풀 수 있다!!

 

 

참고)  https://hyojun.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-H-Index-Java

 

 

 

 

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;        
        
        Arrays.sort(citations);
       
        for(int j = 0; j < citations.length; j++){
            int h = citations.length - j; // 인용된 논문의 수

            if(citations[j] >= h){
                answer = h;
                break;
            }
        }        
        return answer;
    }
}