[알고리즘 문제풀이] 프로그래머스 - K번째 수

yourjin·2022년 2월 27일
0

알고리즘 문제풀이

목록 보기
7/28
post-thumbnail

TIL (2022.02.11)

➕ 오늘 푼 문제


프로그래머스 - K번째 수

➕ 아이디어


지문 그대로 구현하면 되는 문제이다!

  • 배열을 (i-1, j) 범위로 자른다.
  • 자른 배열을 오름차순으로 정렬한다.
  • k번째 수를 결과 리스트에 추가한다.

➕ Java 코드


import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        int index = 0;
        
        for(int[] command : commands){
            int i = command[0]; 
            int j = command[1]; 
            int k = command[2];
            
            int[] arr = Arrays.copyOfRange(array, i-1, j);
            Arrays.sort(arr);
            answer[index++] = arr[k-1];
        }        
        return answer;
    }
}

➕ Python 코드


def solution(array, commands):
    answer = []
    
    for i, j, k in commands:
        arr = array[i-1:j]
        arr.sort()
        answer.append(arr[k-1])
    
    return answer

➕ 궁금한 내용 및 소감


  • 파이썬으로는 너무 쉽게 구현되는 문제라 넘어가도록 하겠다. 자바에는 문자열을 자르고 복사하는 함수가 없을까봐 걱정했는데, 찾아보니 Arrays에서 제공하는 함수가 있어서 쉽게 해결할 수 있었다.
  • 자바로 문제를 풀 때, 파이썬과 달라 궁금한 점이 두 가지가 있다.
    1. 배열(리스트)나 맵(딕셔너리) 등의 반복문 처리

      • 파이썬에서는 반복문을 돌면서 동시에 지역 변수를 선언할 수 있다. 패킹(packing)과 언패킹(unpacking)의 개념이 있기 때문이다. 자바에서는 이를 어떻게 처리하는 지 궁금하다.

      • 참고 링크: https://ponyozzang.tistory.com/406

    2. 배열과 리스트 간의 변환

      • 파이썬은 배열(리스트)의 크기를 지정할 필요가 없다. 하지만 자바에서는 크기 지정이 필요하다. 이 부분이 문제가 되는 경우들이 있는데, 그때 나는 보통 리스트(ArrayList)를 사용해 파이썬의 리스트처럼 다룬 다음 배열로 변환하여 출력한다. 이 방법이 과연 최선인가? 궁금하다.

➕ 참고 문헌


profile
make it mine, make it yours

0개의 댓글