๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm

[Algorithm/JAVA][ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค]K๋ฒˆ์งธ ์ˆ˜

๋ฐ˜์‘ํ˜•

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] K๋ฒˆ์งธ ์ˆ˜

https://programmers.co.kr/learn/courses/30/lessons/42748

๋ฌธ์ œ ์„ค๋ช…

๋ฐฐ์—ด 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์ž…๋‹ˆ๋‹ค.

Code

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 a,b,c;
            a=commands[i][0];
            b=commands[i][1];
            c=commands[i][2];
            int[] temp = Arrays.copyOfRange(array,a-1,b);
            Arrays.sort(temp);
            answer[i]=temp[c-1];
        }
        return answer;
    }
}

Code ์„ค๋ช…

answer์˜ ํฌ๊ธฐ๋Š” commands์˜ ํฌ๊ธฐ์™€ ๋™์ผํ•˜๊ณ  commands์˜ ํฌ๊ธฐ๋งŒํผ ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ์•„์•ผ ํ•œ๋‹ค.
๋ฌธ์ œ์„ค๋ช…์—์„œ i๋Š” a, j๋Š” b, k๋Š” c๋กœ ๋ฐ›์•„์„œ input์ธ array์— a๋ฒˆ์งธ๋ถ€ํ„ฐ b๋ฒˆ์งธ๊นŒ์ง€ ๋ณต์‚ฌํ•˜์—ฌ temp๋กœ ์˜ฎ๊ธฐ๊ณ  temp๋ฅผ ์ •๋ ฌํ•ด์„œ c๋ฒˆ์งธ๋ฅผ answer[i]์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

๋ฐฐ์šด์ 

Java๋ฅผ 2๋…„์ „์— ์ž ๊น ํ•™๊ณผ์—์„œ ๋ฐฐ์šฐ๊ณ  ์‚ฌ์šฉ์„ ์•ˆํ•˜๋‹ค๊ฐ€ ์ด๋ฒˆ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋„ ํ•  ๊ฒธ ์ž๋ฐ”๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•ด์„œ ์•„์ง ์ž๋ฐ” ์‚ฌ์šฉ์ด ๋‚ฏ์„ค๋‹ค.
๊ธฐ์กด์— ์“ฐ๋˜ C/C++๊ณผ ๋‹ฌ๋ฆฌ Java๋Š” ๊ทธ๋ƒฅ ๋ฐฐ์—ด์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽธํ•œ ๋ฉ”์†Œ๋“œ๋“ค์ด ๋งŽ๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๊ฒŒ ๋˜์—ˆ๋‹ค.

  1. ๋ฐฐ์—ด์„ ์–ธ
    ์ž๋ฐ”๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธํ•  ๋•Œ int[] answer = new int[commands.length] ์™€ ๊ฐ™์ด ํ• ๋‹น์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  2. java.util.Arrays
    ์ž๋ฐ”์˜ util ํŒจํ‚ค์ง€๋Š” ์ •๋ง ์ž์ฃผ ์“ฐ์ด๊ณ  ์œ ์šฉํ•œ ๊ฒƒ๋“ค์ด ๋งŽ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ณดํ†ต import java.util.*๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋ฏ€๋กœ ํ•„์š”ํ•œ๊ฒŒ ๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ importํ•ด์ค˜์„œ ์‚ฌ์šฉํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
    Arraysํด๋ž˜์Šค๋Š” ์ด๋ฆ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฐฐ์—ด์„ ๋‹ค๋ฃจ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
    ์ด๋ฒˆ์— ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ๋Š” copyOfRange(), sort() ์ด๋‹ค.

copyOfRange(arr,startidx,endidx)
์ด ๋ฉ”์†Œ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ณต์‚ฌํ•  ์›๋ณธ ๋ฐฐ์—ด์„ ๋ฐ›๊ณ , ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‹œ์ž‘ ์ธ๋ฑ์Šค, ์„ธ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋งˆ์ง€๋ง‰ ๋ณต์‚ฌ๋  ๋ฐฐ์—ด ์ธ๋ฑ์Šค+1์„ ๋ฐ›์•„์„œ ์›๋ณธ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ํƒ€์ž…์˜ ๋ณต์‚ฌ๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

sort(arr)
์ด ๋ฉ”์†Œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐฐ์—ด์„ ๋ฐ›๊ณ  ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ค€๋‹ค.

๋ฐ˜์‘ํ˜•