ygreenb
yellowgreenblue
ygreenb
전체 방문자
오늘
어제
  • TIL (130)
    • Algorithm & Data Structure (70)
      • 이론 (4)
      • 프로그래머스 (54)
      • 백준 (12)
    • JAVA (4)
    • Android Studio (9)
    • Database (1)
    • WEB (25)
      • HTML+CSS (7)
      • Javascript (5)
      • React (11)
      • Django (1)
      • Node.js (1)
    • Computer Vision (13)
    • Git (8)

블로그 메뉴

  • HOME
  • TAG
  • GITHUB

공지사항

인기 글

태그

  • React
  • java
  • entrySet
  • BFS
  • 코틀린
  • 프로그래머스
  • Queue
  • Android
  • 백준
  • 깃
  • 안드로이드
  • Comparator
  • git bash
  • HashMap
  • 깃허브
  • kotiln
  • 해시
  • dfs
  • PriorityQueue
  • getOrDefault
  • Arrays.sort()
  • stack
  • greedy
  • git
  • sort
  • compareTo()
  • 프로그래머스 Lv.2
  • 스택/큐
  • DP
  • reactjs

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ygreenb

yellowgreenblue

Algorithm & Data Structure/프로그래머스

[Java] 프로그래머스 : k번째 수

2022. 2. 11. 01:26

https://programmers.co.kr/learn/courses/30/lessons/42748?language=java 

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

 

풀이

commands.length만큼 반복문을 돌린다.

새로운 int 배열 arr에 coomand[i][1]번째부터 command[i][0]번째 원소를 복사하고 정렬시킨다.

arr 에서 k번째 수인 command[i][2]-1번째 원소 구해 answer[i]에 넣어준다.

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[] arr = new int[commands[i][1]-commands[i][0]+1];
            int c = 0;
            for(int j=commands[i][0]-1; j<commands[i][1]; j++){                
                arr[c]=array[j]; c+=1;
            }
            Arrays.sort(arr);
            answer[i]=arr[commands[i][2]-1];
        }
        return answer;
    }
    
}

 

정렬 직접 구현

위에선 정렬을 라이브러리로 했었는데 정렬문제니 직접 구현해보는것도 좋다고 생각한다.

퀵소트(Quick sort)를 구현한 함수 sort()를 정의해 정렬을 한 코드이다.

복사한 배열의 가운데 요소를 pivot으로 줘서 pivot을 기준으로 정렬을 한다.

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[] arr = new int[commands[i][1]-commands[i][0]+1];
            int c = 0;
            for(int j=commands[i][0]-1; j<commands[i][1]; j++){                
                arr[c]=array[j]; c+=1;
            }
            sort(arr,0,commands[i][1]-commands[i][0]);
            answer[i]=arr[commands[i][2]-1];
        }
        return answer;
    }
    void sort(int[] a,int left,int right){
        int pl = left;
        int pr = right;
        int x = a[(pl+pr)/2];
        
        do{
            while(a[pl]<x) pl++;
            while(a[pr]>x) pr--;
            if(pl<=pr){
                int tmp = a[pl];
                a[pl] = a[pr];
                a[pr] = tmp;
                pl++;
                pr--;
            }
        }while(pl<=pr);
            
        if(pr>left) sort(a,left,pr);
        if(pl<right) sort(a,pl,right);
    }
}

 

+ 참고

배열을 복사하는 라이브러리 함수에는 copyOfRange()가 있다.

Arrays.copyOfRange(array, commands[i][0]-1, commands[i][1]);
저작자표시 (새창열림)

'Algorithm & Data Structure > 프로그래머스' 카테고리의 다른 글

[Java] 프로그래머스 : 체육복  (0) 2022.02.14
[Java] 프로그래머스 : 모의고사  (0) 2022.02.11
[Java] 프로그래머스 : 시저 암호  (0) 2022.02.08
[Java] 프로그래머스 : 콜라츠 추측  (0) 2022.02.07
[Java] 프로그래머스 : 3진법 뒤집기  (0) 2022.02.07
    'Algorithm & Data Structure/프로그래머스' 카테고리의 다른 글
    • [Java] 프로그래머스 : 체육복
    • [Java] 프로그래머스 : 모의고사
    • [Java] 프로그래머스 : 시저 암호
    • [Java] 프로그래머스 : 콜라츠 추측
    ygreenb
    ygreenb
    개발공부기록장

    티스토리툴바