• ์ž๋ฐ” ๋ฐฐ์—ด์— ์ƒˆ ์š”์†Œ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•, ํšจ์œจ์„ฑ ๋น„๊ต

    2025. 3. 6.

    by. @leeeun

    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๊ธฐ์ดˆ ๋ฌธ์ œ “๋งˆ์ง€๋ง‰ ๋‘ ์›์†Œ” ๋ฅผ ํ’€๋‹ค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ๋งž๋‹ฅ๋œจ๋ ธ๋‹ค.

     

    ๋ฌธ์ œ ์„ค๋ช…

    ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ num_list๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ๊ทธ์ „ ์›์†Œ๋ณด๋‹ค ํฌ๋ฉด ๋งˆ์ง€๋ง‰ ์›์†Œ์—์„œ ๊ทธ์ „ ์›์†Œ๋ฅผ ๋บ€ ๊ฐ’์„ ๋งˆ์ง€๋ง‰ ์›์†Œ๊ฐ€ ๊ทธ์ „ ์›์†Œ๋ณด๋‹ค ํฌ์ง€ ์•Š๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋‘ ๋ฐฐํ•œ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜์—ฌ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

    class Solution {
        public int[] solution(int[] num_list) {
            int n=num_list.length-1;
            return num_list[n] > num_list[n-1] ? num_list[n]-num_list[n-1]:2*num_list[n];
        }
    }
    

     

    ์ƒ๊ฐ์—†์ด ์ด๋ ‡๊ฒŒ ์ ์—ˆ๋‹ค๊ฐ€.. ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์ด int[] ๋ผ๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์•˜๋‹ค.

     

    ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’ ์ƒ๊ฐํ•˜๊ธฐ
    ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ int[] ์ธ๋ฐ, int ๊ฐ’์„ ๋ฐ˜ํ™˜ ์ค‘ int[] ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•จ

     

    ๊ทธ๋ ‡๋‹ค๋ฉด.. ์ž๋ฐ”์—์„œ (์ •์ ) ๋ฐฐ์—ด์— ์›์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”๊ฐ€ํ• ๊นŒ?

    ์ผ๋‹จ ๋ฐฐ์—ด ๊ฐœ๋…๋ถ€ํ„ฐ ๋น ๋ฅด๊ฒŒ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ž.

     

    ๋ฐฐ์—ด(Array) ์ด๋ž€?

    • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
    • ๋ณต์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐ์‹œ์ผœ ๊ด€๋ฆฌํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

    ์ •์  ๋ฐฐ์—ด(Static Array)

    • ๊ฐ™์€ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†์  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๊ณ  ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณผ์ •์—์„œ ์ •ํ•ด์ง„ ์‚ฌ์ด์ฆˆ์—์„œ ๋ณ€๋™๋˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.
    • ์‹œ์ž‘ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋งŒ์„ ์ €์žฅํ•˜๊ณ , ๊ทธ ์™ธ์˜ ์ฃผ์†Œ๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹  Offset(์‹œ์ž‘ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ์žˆ๋Š”์ง€)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผํ•œ๋‹ค.
    • ์ ‘๊ทผ์ด ๋น ๋ฅธ ๋Œ€์‹ , ์‚ฝ์ž… & ์‚ญ์ œ & ๋ณ€๊ฒฝ์ด ์–ด๋ ต๋‹ค.
    int[] staticArray = new int[5]; // ์„ ํ—Œํ•  ๋•Œ ์‚ฌ์ด์ฆˆ ์ง€์ •
    staticArray[0] = 10;
    System.out.println(staticArray[0]); // 10
    

     

    ๋™์  ๋ฐฐ์—ด(Dynamic Array)

    • ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ฐ€๋ณ€์ ์ธ(๋™์ ์ธ) ๋ฐฐ์—ด์ด๋‹ค.
    • ์ž๋ฐ”์—์„œ์˜ ArrayList
    • ์š”์†Œ ์ถ”๊ฐ€, ์‚ญ์ œ๊ฐ€ ์ž์œ ๋กญ๋‹ค. ์š”์†Œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œํ•˜๋ฉด ์ž๋™์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ๋ณ€ํ•œ๋‹ค.
    import java.util.ArrayList;
    
    public class Main {
        public static void main(String[] args) {
            ArrayList<Integer> dynamicArray = new ArrayList<>(); //๋™์  ๋ฐฐ์—ด ์„ ์–ธ
    
            dynamicArray.add(10);
            dynamicArray.add(20);
            System.out.println(dynamicArray.get(0)); // 10
    
            dynamicArray.remove(0); // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์‚ญ์ œ
            System.out.println(dynamicArray.size()); // 1 (ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์ค„์–ด๋“ฆ)
        }
    }
    

     

    ์ •๋ฆฌํ•˜๋ฉด ์ž๋ฐ”์˜ (์ •์ ) ๋ฐฐ์—ด → ๊ธธ์ด๊ฐ€ ๊ณ ์ •. ํ•œ ๋ฒˆ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์ •ํ•ด์ง€๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Œ

    ๊ทธ๋Ÿผ ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

     

    “์ž๋ฐ” ๋ฐฐ์—ด์— ์š”์†Œ ์ถ”๊ฐ€” ์ด ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•˜๋‹ˆ๊นŒ ์•„๋ž˜ ๊ธ€์ด ๋‚˜์˜ค๋”๋ผ… ๋„ˆ๋ฌด ์›ƒ๊ฒผ๋‹ค.

    ์–ด์จŒ๋“ .. ๊ณ ์ •์ ์ธ ๊ธธ์ด์˜ ์ž๋ฐ” ๋ฐฐ์—ด์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.

     

    (1) System.arraycopy ์ด์šฉ

    class Solution {
        public static int[] addElement(int[] original, int newValue) {
            int n = original.length;
            int[] newArray = new int[n + 1]; // ๊ธฐ์กด ๋ฐฐ์—ด๋ณด๋‹ค 1๊ฐœ ๋” ํฐ ์ƒˆ ๋ฐฐ์—ด ์ƒ์„ฑ
    
            System.arraycopy(original, 0, newArray, 0, n); // ๊ธฐ์กด ๋ฐฐ์—ด ๋ณต์‚ฌ
            newArray[n] = newValue; // ์ƒˆ๋กœ์šด ์›์†Œ ์ถ”๊ฐ€
            return newArray;
        }
    }
    
    • ๋” ํฐ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์„œ ๊ธฐ์กด ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ์›์†Œ ์ถ”๊ฐ€

     

    (2) Arrays.copyOf

    import java.util.Arrays;
    
    class Solution {
        public static int[] addElement(int[] original, int newValue) {
            int[] newArray = Arrays.copyOf(original, original.length + 1); // ๊ธฐ์กด ๋ฐฐ์—ด์—์„œ ํฌ๊ธฐ๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚จ ๋ฐฐ์—ด ์ƒ์„ฑ
            newArray[original.length] = newValue; // ์ƒˆ๋กœ์šด ์š”์†Œ ์ถ”๊ฐ€
            return newArray;
        }
    }
    

     

    (3) ArrayList ํ™œ์šฉ

    import java.util.ArrayList;
    import java.util.Arrays;
    
    class Solution {
        public static int[] addElement(int[] original) {
            ArrayList<Integer> dynamicArray = new ArrayList<>(Arrays.asList(original));
            dynamicArray.add(4);
            
            return dynamicArray;
        }
    }
    

    ๋ฐ˜๋ฉด ๋™์  ๋ฐฐ์—ด์€, ArrayList์˜ ๋‚ด์žฅํ•จ์ˆ˜์ธ add()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ์–ด๋–ค ๋ฐฉ์‹์„ ์“ฐ๋Š” ๊ฒŒ ํšจ์œจ์ ์ธ๊ฐ€?

     

    1๏ธโƒฃ System.arraycopy() ์ด์šฉ

    ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ•์ด๊ณ , ์ถ”๊ฐ€์ ์ธ ๊ฐ์ฒด ์ƒ์„ฑ์ด ํ•„์š” ์—†๋‹ค.

    ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ถ”ํ›„์— ๋˜ ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ผ์ด ์žˆ๋‹ค๋ฉด ์„ฑ๋Šฅ ๋ถ€๋‹ด์ด ์žˆ๋‹ค.

     

    2๏ธโƒฃ Arrays.copyOf() ์ด์šฉ

    ๋‚ด๋ถ€์ ์œผ๋กœ System.arraycopy() ๋ฅผ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ 1๋ฒˆ๊ณผ ์„ฑ๋Šฅ์ด ๊ฑฐ์˜ ๋™์ผํ•˜๋‹ค.

    (ํ˜ธ์ถœ ๊ณผ์ •์—์„œ ์•„์ฃผ ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ)

    ์ฝ”๋“œ๋Š” 1๋ฒˆ๋ณด๋‹ค ์ง๊ด€์ ์ด๋‹ค.

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

     

    3๏ธโƒฃ ArrayList ํ™œ์šฉ

    ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์ด ํŽธ๋ฆฌํ•œ ๋Œ€์‹  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

    ์—ฌ๋Ÿฌ ๋ฒˆ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ผ์ด ์žˆ์„ ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

    ์ •๋ฆฌํ•˜๋ฉด, 1๋ฒˆ๊ณผ 2๋ฒˆ์˜ ์„ฑ๋Šฅ์€ ๋น„์Šทํ•˜๊ณ  ( ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•˜๋Š” O(N) ์—ฐ์‚ฐ )

    3๋ฒˆ์€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋Œ€์‹  ๋ฐฐ์—ด ํฌ๊ธฐ๊ฐ€ ๊ณ„์† ๋ณ€ํ•ด์•ผ ํ•œ๋‹ค๋ฉด 3๋ฒˆ์„ ์“ฐ๋Š” ๊ฒŒ ํŽธํ•˜๋‹ค.

     

    โœ” ์†๋„ & ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋ฉด System.arraycopy()
    โœ” ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ƒ๊ฐํ•˜๋ฉด Arrays.copyOf()
    โœ” ์œ ์—ฐํ•œ ํฌ๊ธฐ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋ฉด ArrayList

    ๋Œ“๊ธ€