๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programmers lv-0

์ง„๋ฃŒ์ˆœ์„œ ์ •ํ•˜๊ธฐ - Java [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ž…๋ฌธ]

by ๊ทคํ”ผํ‚ค 2022. 11. 27.

 

โค๏ธ Problem

๋”๋ณด๊ธฐ
  • ๋ฌธ์ œ
    ์™ธ๊ณผ์˜์‚ฌ ๋จธ์“ฑ์ด๋Š” ์‘๊ธ‰์‹ค์— ์˜จ ํ™˜์ž์˜ ์‘๊ธ‰๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง„๋ฃŒ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ •์ˆ˜ ๋ฐฐ์—ด emergency๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์‘๊ธ‰๋„๊ฐ€ ๋†’์€ ์ˆœ์„œ๋Œ€๋กœ ์ง„๋ฃŒ ์ˆœ์„œ๋ฅผ ์ •ํ•œ ๋ฐฐ์—ด์„ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

  • ์ œํ•œ ์‚ฌํ•ญ
    • ์ค‘๋ณต๋œ ์›์†Œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
    • 1 ≤ emergency์˜ ๊ธธ์ด ≤ 10
    • 1 ≤ emergency์˜ ์›์†Œ ≤ 100

 

  • ์ž…์ถœ๋ ฅ ์˜ˆ & ์„ค๋ช…

no emergency result
1 [3, 76, 24] [3, 1, 2]
2 [1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1]
3 [30, 10, 23, 6, 100] [2, 4, 3, 5, 1]
  1. emergency๊ฐ€ [3, 76, 24]์ด๋ฏ€๋กœ ์‘๊ธ‰๋„์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด [3, 1, 2]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.
  2. emergency๊ฐ€ [1, 2, 3, 4, 5, 6, 7]์ด๋ฏ€๋กœ ์‘๊ธ‰๋„์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด [7, 6, 5, 4, 3, 2, 1]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.
  3. emergency๊ฐ€ [30, 10, 23, 6, 100]์ด๋ฏ€๋กœ ์‘๊ธ‰๋„์˜ ํฌ๊ธฐ ์ˆœ์„œ๋Œ€๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋งค๊ธด [2, 4, 3, 5, 1]๋ฅผ returnํ•ฉ๋‹ˆ๋‹ค.

 

 


 

๐Ÿ’› Solution

ํ’€์ด

import java.util.Arrays;
import java.util.HashMap;

class Solution {
    public int[] solution(int[] emergency) {
        //๊นŠ์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ
        int[] copyArr = emergency.clone();
        Arrays.sort(copyArr);

        //์ •๋ ฌ์ˆœ์„œ๋Œ€๋กœ ์‘๊ธ‰๋„ ์—ญ์ˆœ ๋ถ€์—ฌ + Map์— ์ €์žฅ
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(){{
            int rank = copyArr.length;
            for (int i=0; i<copyArr.length; i++) {
                put(copyArr[i], rank);
                rank--;
            }
        }};

        //๋ฐฐ์—ด ๊ฐ’์„ ์‘๊ธ‰๋„๋กœ ๋ฐ”๊พผ ๋’ค ๋ฐฐ์—ด ๋ฆฌํ„ด
        for (int i=0; i<emergency.length; i++) {
            emergency[i] = map.get(Integer.valueOf(emergency[i]));
        }
        return emergency;
    }
}

 

 

์ฒ˜๋ฆฌ์†๋„์— ๋Œ€ํ•œ ๋ณด์™„์ด ํ•„์š”ํ•ด ๋ณด์ธ๋‹ค

 

 


 

๐Ÿ’œ Comment

์ฒ˜์Œ์— copyArr[]์— emergency[]์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ž๊พธ emergency[]์ด copyarr[]์™€ ๊ฐ™์€ ์ •๋ ฌ์„ ๊ฐ€์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

 

        int[] copyArr = emergency;
        Arrays.sort(copyArr);
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(){{
            int rank = copyArr.length;
            for (int i=0; i<copyArr.length; i++) {
                put(copyArr[i], rank);
                rank--;
            }
        }};

        for (int i=0; i<emergency.length; i++) {
            emergency[i] = map.get(Integer.valueOf(emergency[i]));
            System.out.println(emergency[i]);
        }

 

๋ฌธ์ œ์˜ ์›์ธ์€ "int[] copyArr = emergency;" ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ ์ค‘์—์„œ ์–•์€ ๋ณต์‚ฌ์— ํ•ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ˆœํžˆ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ณต์‚ฌํ•˜๊ฒŒ ๋œ๋‹ค.


์ฆ‰, copyArr[]์™€ emergency[]๊ฐ€ ๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋‹ค๋ฅธ ๋ฐฐ์—ด์˜ ๊ฐ’๊นŒ์ง€ ๋ณ€๊ฒฝ๋˜๋Š” ํšจ๊ณผ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์–ด์ฉ์ง€ ์ž๊พธ ์ •๋ ฌ๋œ ๊ฐ’์œผ๋กœ ๋‚˜์˜ค๋”๋ผ..๐Ÿ˜ฅ


ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.


 

๐Ÿค Concept

๋ฐฐ์—ด ๋ณต์‚ฌ ๋ฐฉ๋ฒ•

  • ์–•์€ ๋ณต์‚ฌ: ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ’์„ ๋ณต์‚ฌ
                ==  ๋ณต์‚ฌ๋œ ๋ฐฐ์—ด๊ณผ ์›๋ณธ ๋ฐฐ์—ด์€ ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค 

 

  • ๊นŠ์€ ๋ณต์‚ฌ: ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์˜ ๊ฐ’์œผ๋กœ ๋ณต์‚ฌ
                ==  ๋ณต์‚ฌ๋œ ๋ฐฐ์—ด๊ณผ ์›๋ณธ ๋ฐฐ์—ด์€ ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ๊ณ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค
    • ๋ฐฐ์—ด๋ช….clone();
    • Arrays.copyOf(์›๋ณธ ๋ฐฐ์—ด๋ช…, ๋ณต์‚ฌํ•  ๊ธธ์ด);
    • Arrays.copyOfRange(์›๋ณธ ๋ฐฐ์—ด๋ช…, ์‹œ์ž‘์ธ๋ฑ์Šค, ๋ณต์‚ฌํ•  ๊ธธ์ด);

 

 

๋Œ“๊ธ€