[Java Algorithm] 프로그래머스 Lv.1 _ K번째수

2025. 7. 29. 15:17·Algorithm Study

[문제]

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

1. array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
2. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
3. 2에서 나온 배열의 3번째 숫자는 5입니다.

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항
- array의 길이는 1 이상 100 이하입니다.
- array의 각 원소는 1 이상 100 이하입니다.
- commands의 길이는 1 이상 50 이하입니다.
- commands의 각 원소는 길이가 3입니다.

 

[Algorithm]

1. commands 배열 반복문 순회 → 각 인덱스의 int i, int j, int k를 꺼냄

2. arrays 배열에서 i번째부터 j번째까지 부분 배열 추출 → Arrays 클래스의 copyOfRange() 메서드 사용

3. 추출한 배열 정렬 → Arrays 클래스의 sort() 메서드 사용

4. 결과 배열에 추출 후 정렬한 부분 배열의 k-1 번째 원소를 담기

 

[Code]

import java.util.*;

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

 

 

[+ 다른 사람 풀이]

import java.util.Arrays;

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

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

        return answer;
    }
}

 

코드를 더 짧게 쓴 버전

int i, j, k를 따로 선언하지 않고 commands 인덱스에서 직접 꺼내쓰는 방식이다

코드가 더 간결하게 보이는 장점이 있는듯?

 

 

[+ Plus]

더보기

💡Arrays 클래스의 copyOfRange() 메서드

→배열을 특정 범위만큼 복사해 새로운 배열을 반환하는 메서드

Arrays.copyOfRang(복사할 원본 배열, 복사를 시작할 인덱스, 복사를 끝낼 인덱스)

 

* 복사할 배열의 길이가 복사를 끝낼 인덱스로 입력한 길이보다 작을 경우, 원본 배열의 마지막 인덱스 이후의 값은 배열의 타입 기본값으로 초기화되어 복사됨

* 복사를 시작할 인덱스로 복사할 원본 배열의 길이보다 큰 값을 주면 exception이 발생해 처리 X

 

저작자표시 변경금지 (새창열림)

'Algorithm Study' 카테고리의 다른 글

[Java Algorithm] 프로그래머스 Lv.2 _ H-Index  (2) 2025.07.30
[Java Algorithm] 프로그래머스 Lv.2 _ 가장 큰 수  (4) 2025.07.30
[Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범  (1) 2025.07.28
[Java Algorithm] 프로그래머스 Lv.2 _ 의상  (3) 2025.07.28
[Java Algorithm] 프로그래머스 Lv.2 _ 전화번호 목록  (1) 2025.07.28
'Algorithm Study' 카테고리의 다른 글
  • [Java Algorithm] 프로그래머스 Lv.2 _ H-Index
  • [Java Algorithm] 프로그래머스 Lv.2 _ 가장 큰 수
  • [Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범
  • [Java Algorithm] 프로그래머스 Lv.2 _ 의상
microsaurs
microsaurs
개발 스터디로그입니다. 공부한 내용을 정리해서 올립니다 ㅇ-ㅇ
  • microsaurs
    microsaurs.devlog
    microsaurs
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • Side Project (4)
      • Algorithm Study (53)
      • JAVA (8)
      • Swift (11)
      • Python (21)
      • CS (5)
      • React (3)
      • 리얼클래스 studylog (27)
      • 정보처리기사[실기] (23)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스위프트기초
    The Office
    Algorithm
    타일러영어
    더오피스
    정보처리기사
    정보처리기사프로그래밍언어
    ios프로그래밍을위한스위프트기초
    SWIFT
    영어회화
    Python
    영어독학
    javaalgorithm
    study
    프로그래밍언어
    파이썬문법
    ios프로그래밍
    알고리즘
    리얼클래스
    프로그래머스
    리얼학습일기
    javaStudy
    파이썬
    ios개발
    정보처리기사실기
    파이썬기초
    자바알고리즘
    Java
    나도코딩
    정처기실기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
microsaurs
[Java Algorithm] 프로그래머스 Lv.1 _ K번째수
상단으로

티스토리툴바