Programming/Java, Kotlin

[Java] ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ž˜ ์“ฐ์ด๋Š” java ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Space_Jin 2025. 5. 3. 13:24
728x90
๋ฐ˜์‘ํ˜•
์ž์ฃผ ์“ฐ์ด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
๋ฐฐ์—ด
import java.util.*;

public class ListExample {
    public static void main(String[] args) {
		// intํ˜• ๋ฐฐ์—ด
        int[] intArray = new int[100]; // ํฌ๊ธฐ๊ฐ€ 100์ธ intํ˜• ๋ฐฐ์—ด ์ƒ์„ฑ (์ดˆ๊ธฐ๊ฐ’ 0)
        int[] intArrayInit = {1, 2, 3, 4, 5};	// ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ๊ฐ’์„ ํ• ๋‹นํ•œ ๋ฐฐ์—ด

        // ์š”์†Œ ์ ‘๊ทผ (์ธ๋ฑ์Šค ์‚ฌ์šฉ)
        System.out.println(intArray[0)); 	// ์ถœ๋ ฅ: 0
        System.out.println(intArrayInit[0)); // ์ถœ๋ ฅ: 1

		// ๋ฌธ์ž์—ด ๋ฐฐ์—ด
        String[] stringArray = new String[100];	// ํฌ๊ธฐ๊ฐ€ 100์ธ ๋ฌธ์ž์—ด ๋ฐฐ์—ด
        
        // ๋…ผ๋ฆฌํ˜• ๋ฐฐ์—ด
        boolean[] boolArray = new boolean[100];	// ํฌ๊ธฐ๊ฐ€ 100์ธ ๋…ผ๋ฆฌํ˜• ๋ฐฐ์—ด(์ดˆ๊ธฐ ๊ฐ’ false)
        
		// ArrayList ์ƒ์„ฑ
        List<Integer> list = new ArrayList<>();

        // ์š”์†Œ ์ถ”๊ฐ€
        list.add(10);
        list.add(20);
        list.add(30);

        // ์š”์†Œ ์ ‘๊ทผ (์ธ๋ฑ์Šค ์‚ฌ์šฉ)
        System.out.println(list.get(0)); // ์ถœ๋ ฅ: 10

        // ํฌ๊ธฐ ํ™•์ธ
        System.out.println(list.size()); // ์ถœ๋ ฅ: 3

        // ์š”์†Œ ์‚ญ์ œ
        list.remove(1); // ์ธ๋ฑ์Šค 1์˜ ์š”์†Œ (20) ์‚ญ์ œ
        System.out.println(list); // ์ถœ๋ ฅ: [10, 30]
    }
}

๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ, ์ •์ˆ˜ํ˜•(int or long ํƒ€์ž…), ๋ฌธ์žํ˜•(String ํƒ€์ž…), ๋…ผ๋ฆฌํ˜•(boolean ํƒ€์ž…)์˜ ๋ฐฐ์—ด์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐ’์„ ๊ณ„์† ์‚ฝ์ž…, ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ ArrayList๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง„ ๋ฐฐ์—ด ์•ˆ์—์„œ ์กฐ์ž‘์„ ํ•œ๋‹ค๋ฉด, ์„ฑ๋Šฅ์ ์œผ๋กœ ArrayList๋ณด๋‹ค int, String, boolean ํƒ€์ž…์˜ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋ฐฐ์—ด - ArrayList  ๋ฐฐ์—ด
import java.util.ArrayList;
import java.util.List;

public class ArrayListArrayExample {

    public static void main(String[] args) {

        // 1. ArrayList<Integer>๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ 5์งœ๋ฆฌ ๋ฐฐ์—ด ์„ ์–ธ ๋ฐ ์ƒ์„ฑ
        ArrayList<Integer>[] arrayOfLists = new ArrayList[5];
        // ๋˜๋Š” List<Integer>[] arrayOfLists = new List[5]; (List ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ ์–ธํ•˜๋Š”๊ฒŒ ๋” ์œ ์—ฐ)

        // 2. ๋ฐฐ์—ด์˜ ๊ฐ ์นธ์— ์‹ค์ œ ArrayList ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๊ธฐ
        for (int i = 0; i < arrayOfLists.length; i++) {
            arrayOfLists[i] = new ArrayList<>();
        }

        // 3. ๊ฐ ArrayList์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ํ•˜๊ธฐ
        arrayOfLists[0].add(1);
        arrayOfLists[0].add(2);

        arrayOfLists[1].add(11);

        arrayOfLists[2].add(100);
        arrayOfLists[2].add(200);
        arrayOfLists[2].add(300);

        // 4. ๋ฐ์ดํ„ฐ ํ™•์ธ
        for (int i = 0; i < arrayOfLists.length; i++) {
            System.out.println("arrayOfLists[" + i + "]์˜ ๋‚ด์šฉ: " + arrayOfLists[i]);
        }

        // 5. ํŠน์ • ์š”์†Œ ์ ‘๊ทผ
        System.out.println("\narrayOfLists[2]์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ: " + arrayOfLists[2].get(0));
    }
}

๋ฆฌ์ŠคํŠธ ๋ฐฐ์—ด

import java.util.ArrayList;
import java.util.List;

public class NestedArrayListExample {

    public static void main(String[] args) {

        // ArrayList<ArrayList<Integer>> ์„ ์–ธ ๋ฐ ์ƒ์„ฑ
        ArrayList<ArrayList<Integer>> listOfLists = new ArrayList<>();
        // ๋˜๋Š” List<List<Integer>> listOfLists = new ArrayList<>();

        // ์•ˆ์ชฝ ArrayList (ํ–‰) ์ถ”๊ฐ€ ๋ฐ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
        ArrayList<Integer> row1 = new ArrayList<>();
        row1.add(1);
        row1.add(2);
        listOfLists.add(row1); // ์ฒซ ๋ฒˆ์งธ ํ–‰ ์ถ”๊ฐ€

        ArrayList<Integer> row2 = new ArrayList<>();
        row2.add(10);
        row2.add(20);
        row2.add(30);
        listOfLists.add(row2); // ๋‘ ๋ฒˆ์งธ ํ–‰ ์ถ”๊ฐ€

        // ์„ธ ๋ฒˆ์งธ ํ–‰์€ ๋งŒ๋“ค๋ฉด์„œ ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
        listOfLists.add(new ArrayList<>()); // ์„ธ ๋ฒˆ์งธ ํ–‰ ์ถ”๊ฐ€
        listOfLists.get(2).add(100);
        listOfLists.get(2).add(200);


        // ๋‚ด์šฉ ์ถœ๋ ฅ
        System.out.println("์ „์ฒด ๋ฆฌ์ŠคํŠธ ๋‚ด์šฉ:");
        for (int i = 0; i < listOfLists.size(); i++) {
            System.out.println("  ํ–‰ " + i + ": " + listOfLists.get(i));
        }

        // ํŠน์ • ์š”์†Œ ์ ‘๊ทผ
        System.out.println("\n๋‘ ๋ฒˆ์งธ ํ–‰ (์ธ๋ฑ์Šค 1)์˜ ์„ธ ๋ฒˆ์งธ ์š”์†Œ (์ธ๋ฑ์Šค 2): " + listOfLists.get(1).get(2)); // ์ถœ๋ ฅ: 30

        // ์ƒˆ๋กœ์šด ํ–‰ ์ถ”๊ฐ€
        listOfLists.add(new ArrayList<>()); // ๋„ค ๋ฒˆ์งธ ํ–‰ ์ถ”๊ฐ€
        listOfLists.get(3).add(999);

        System.out.println("\n๋„ค ๋ฒˆ์งธ ํ–‰ ์ถ”๊ฐ€ ํ›„ ์ „์ฒด ๋ฆฌ์ŠคํŠธ ๋‚ด์šฉ:");
        for (int i = 0; i < listOfLists.size(); i++) {
            System.out.println("  ํ–‰ " + i + ": " + listOfLists.get(i));
        }
    }
}

๋ฆฌ์ŠคํŠธ ํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ๋ฆฌ์ŠคํŠธ

 

Set

Set ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ค‘๋ณต ๊ฐ’์„ ์ œ๊ฑฐํ•ด์„œ ๊ฐ’๋“ค์„ ์ €์žฅํ•  ๋•Œ ์œ ์šฉ

import java.util.HashSet;
import java.util.Set;

public class SetExample {
    public static void main(String[] args) {
        // HashSet ์ƒ์„ฑ
        Set<String> set = new HashSet<>();

        // ์š”์†Œ ์ถ”๊ฐ€ (์ค‘๋ณต์€ ํ•˜๋‚˜๋งŒ ์ €์žฅ๋จ)
        set.add("Java");
        set.add("Python");
        set.add("Java"); // ์ค‘๋ณต
        set.add("C++");

        System.out.println(set); // ์ถœ๋ ฅ: [Java, C++, Python] (์ˆœ์„œ ๋ณด์žฅ ์•ˆ๋จ)

        // ์š”์†Œ ์กด์žฌ ํ™•์ธ
        System.out.println(set.contains("Python")); // ์ถœ๋ ฅ: true

        // ์š”์†Œ ์‚ญ์ œ
        set.remove("C++");
        System.out.println(set); // ์ถœ๋ ฅ: [Java, Python] (์ˆœ์„œ ๋ณด์žฅ ์•ˆ๋จ)
    }
}

 

Stack
import java.util.*;

class Main {
    public static void main(String[] args) {
        Stack<Integer> s = new Stack<>();
        s.push(1);
        s.push(2);
        s.push(3);
		
        // stack์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๊ณ„์†ํ•ด์„œ pop
        while (!s.empty()) {
            System.out.println("stack pop " + s.pop());    
        }
    }
}

Stack์€ First in Last out์œผ๋กœ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๊ฐ’(push)์ด ์ฒ˜์Œ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.(pop)

stack์˜ ๊ฒฝ์šฐ, ๊ฐ’์ด ๋น„์–ด์žˆ์„ ๋•Œ, pop์„ ์‹œ๋„ํ•˜๋ฉด EmptyStackException์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋•Œ๋ฌธ์— ์‚ฌ์šฉ ์‹œ, try-cath๋กœ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ pop ์ด์ „์— empty() ํ•จ์ˆ˜๋กœ ์‚ฌ์ „ ์ฒดํฌํ•ด์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Queue
import java.util.*;

class Main {
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<>();

        q.offer(1); // 1์ถ”๊ฐ€
        q.offer(2); // 2์ถ”๊ฐ€
        q.offer(3); // 3์ถ”๊ฐ€

        // ํ๊ฐ€ ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๊ณ„์† ์ถœ๋ ฅ
        while(q.peek() != null) {
            System.out.println("๋‹ค์Œ ๊ฐ’์€ " + q.peek());
            q.poll(); // ๊ฐ€์žฅ ์•ž์˜ ๊ฐ’์„ ๋ฆฌํ„ด 
        }

        System.out.println("๋งˆ์ง€๋ง‰ " + q.poll());	// ์ถœ๋ ฅ: ๋งˆ์ง€๋ง‰์€ null
    }
}

Queue ์ž๋ฃŒ๊ตฌ์กฐ๋Š” First in First out์œผ๋กœ ์ฒ˜์Œ ๋“ค์–ด์˜จ ๊ฐ’์„ ์ฒ˜์Œ ์ถœ๋ ฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

Queue ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์กด์žฌํ•˜๋ฉฐ, ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์€ LinkedList๋กœ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

offer(value): value ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

peek(): ํ์˜ ๊ฐ€์žฅ ์•ž์˜ ๊ฐ’์„ ํ™•์ธํ•œ๋‹ค(์ถœ๋ ฅ X). ๋น„์–ด ์žˆ๋‹ค๋ฉด null์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋น„์Šทํ•˜๊ฒŒ isEmpty() ํ•จ์ˆ˜๋กœ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.

poll(): ํ์˜ ๊ฐ€์žฅ ์•ž์˜ ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค(๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๊ฐ’). ๊ฐ’์ด ๋น„์–ด ์žˆ๋‹ค๋ฉด, null์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

Deque
import java.util.ArrayDeque;
import java.util.Deque;

public class Main {
    public static void main(String[] args) {
        // Deque ์ƒ์„ฑ (Queue์ฒ˜๋Ÿผ ์‚ฌ์šฉ)
        Deque<Integer> queue = new ArrayDeque<>();
        queue.offerLast(1); // ๋’ค์— ์ถ”๊ฐ€ (enqueue)
        queue.offerLast(2);
        queue.offerLast(3);
        System.out.println("Queue poll: " + queue.pollFirst()); // ์•ž์—์„œ ์ œ๊ฑฐ (dequeue), ์ถœ๋ ฅ: 1
        System.out.println("Queue peek: " + queue.peekFirst()); // ์•ž์—์„œ ํ™•์ธ, ์ถœ๋ ฅ: 2

        // Deque ์ƒ์„ฑ (Stack์ฒ˜๋Ÿผ ์‚ฌ์šฉ)
        Deque<String> stack = new ArrayDeque<>();
        stack.offerFirst("A"); // ์•ž์— ์ถ”๊ฐ€ (push)
        stack.offerFirst("B");
        stack.offerFirst("C");
        System.out.println("Stack poll: " + stack.pollFirst()); // ์•ž์—์„œ ์ œ๊ฑฐ (pop), ์ถœ๋ ฅ: C
        System.out.println("Stack peek: " + stack.peekFirst()); // ์•ž์—์„œ ํ™•์ธ, ์ถœ๋ ฅ: B
    }
}

๋ฑ์€ ํ์™€ ์Šคํƒ์„ ๋™์‹œ์— ํ•จ๊ป˜ ์ƒ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๋˜ํ•œ, ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์—์„œ๋„ Stack๊ณผ Queue ๋ณด๋‹ค ์œ ๋ฆฌํ•œ ๋ฉด์ด ์žˆ์–ด์„œ ์‹ค์ œ ํ…Œ์ŠคํŠธ์—์„œ Stack๊ณผ Queue๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•  ๋•Œ, ๋ชจ๋‘ Deque๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค.

๋‹ค๋งŒ, Heap ๊ตฌ์กฐ๋ฅผ ์œ„ํ•œ ์šฐ์„ ์ˆœ์œ„ ํ(PriorityQueue)๋กœ ์‚ฌ์šฉ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

Heap
import java.util.PriorityQueue;
import java.util.Collections; // ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์— ํ•„์š”

public class Main {
    public static void main(String[] args) {
        // ๊ธฐ๋ณธ PriorityQueue (์ตœ์†Œ ํž™ - ์˜ค๋ฆ„์ฐจ์ˆœ)
        PriorityQueue<Integer> minHeap = new PriorityQueue<>();

        minHeap.offer(30);
        minHeap.offer(10);
        minHeap.offer(20);
        System.out.println("Min Heap: " + minHeap); // ๋‚ด๋ถ€ ์ €์žฅ ์ˆœ์„œ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, poll/peek์€ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ!

        System.out.println("Poll from Min Heap: " + minHeap.poll()); // ์ถœ๋ ฅ: 10 (๊ฐ€์žฅ ์ž‘์€ ๊ฐ’)
        System.out.println("Poll from Min Heap: " + minHeap.poll()); // ์ถœ๋ ฅ: 20
        System.out.println("Poll from Min Heap: " + minHeap.poll()); // ์ถœ๋ ฅ: 30

        System.out.println("--------------------");

        // PriorityQueue (์ตœ๋Œ€ ํž™ - ๋‚ด๋ฆผ์ฐจ์ˆœ)
        // Collections.reverseOrder() ์‚ฌ์šฉํ•ด์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ๊ธฐ์ค€ ๋ณ€๊ฒฝ
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());

        maxHeap.offer(30);
        maxHeap.offer(10);
        maxHeap.offer(20);
        System.out.println("Max Heap: " + maxHeap); // ๋‚ด๋ถ€ ์ €์žฅ ์ˆœ์„œ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ, poll/peek์€ ์šฐ์„ ์ˆœ์œ„๋Œ€๋กœ!

        System.out.println("Poll from Max Heap: " + maxHeap.poll()); // ์ถœ๋ ฅ: 30 (๊ฐ€์žฅ ํฐ ๊ฐ’)
        System.out.println("Poll from Max Heap: " + maxHeap.poll()); // ์ถœ๋ ฅ: 20
        System.out.println("Poll from Max Heap: " + maxHeap.poll()); // ์ถœ๋ ฅ: 10
    }
}

 

์ž์ฃผ ์“ฐ์ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ •๋ ฌ
import java.util.*;

public class SortingExample {
    public static void main(String[] args) {
        // ๋ฐฐ์—ด ์ •๋ ฌ (๊ธฐ๋ณธ ์˜ค๋ฆ„์ฐจ์ˆœ)
        int[] arr = {5, 2, 8, 1, 4};
        Arrays.sort(arr);
        System.out.println("Sorted Array: " + Arrays.toString(arr)); // ์ถœ๋ ฅ: [1, 2, 4, 5, 8]

        // ๋ฐฐ์—ด ์ •๋ ฌ (๋žŒ๋‹ค์‹์„ ์ด์šฉํ•œ ๋‚ด๋ฆผ์ฐจ์ˆœ)
        Integer[] arrDesc = {5, 2, 8, 1, 4}; // ๊ธฐ๋ณธํ˜• int๋Š” ๋žŒ๋‹ค์‹ ์“ฐ๋ ค๋ฉด Wrapper ํด๋ž˜์Šค(Integer) ์‚ฌ์šฉ ํ•„์š”
        Arrays.sort(arrDesc, (a, b) -> b - a);
        System.out.println("Sorted Array (Desc): " + Arrays.toString(arrDesc)); // ์ถœ๋ ฅ: [8, 5, 4, 2, 1]

        // List ์ •๋ ฌ
        List<String> list = new ArrayList<>(Arrays.asList("Cherry", "Apple", "Banana"));
        Collections.sort(list); // ๊ธฐ๋ณธ ์˜ค๋ฆ„์ฐจ์ˆœ
        System.out.println("Sorted List: " + list); // ์ถœ๋ ฅ: [Apple, Banana, Cherry]

        // List ์ •๋ ฌ (๋žŒ๋‹ค์‹์„ ์ด์šฉํ•œ ๋‚ด๋ฆผ์ฐจ์ˆœ)
        Collections.sort(list, (a, b) -> b.compareTo(a));
        System.out.println("Sorted List (Desc): " + list); // ์ถœ๋ ฅ: [Cherry, Banana, Apple]
    }
}

์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์œ„ํ•ด์„œ๋Š” Wrapper ํด๋ž˜์Šค๋กœ ๋žŒ๋‹ค์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•˜๋‹ค.

๋‹ค๋งŒ int ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ, Integer ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ Integer ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ๊ธฐ๊ต๋กœ ์ด์šฉํ•ด์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

1. ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ ํ›„ ํ•„์š”์‹œ ๊ฒ€์ƒ‰์„ ๋ฐ˜๋Œ€๋กœ ์ˆ˜ํ–‰

2. ๋ชจ๋“  ๊ฐ’์— -1์„ ๊ณฑํ•ด์„œ ์˜ค๋ฆ„์ฐจ์ˆœ ํ›„ ์‹ค์ œ ํ•„์š”ํ•œ ๊ฐ’์„ -1์„ ๊ณฑํ•ด์„œ ์‚ฌ์šฉ

import java.util.*;

public class SortingExample {
    public static void main(String[] args) {
        // ๋ฐฐ์—ด ์ •๋ ฌ (๊ธฐ๋ณธ ์˜ค๋ฆ„์ฐจ์ˆœ)
        int[] arr = {5, 2, 8, 1, 4};
        Arrays.sort(arr);
        System.out.println("Sorted Array: " + Arrays.toString(arr)); // ์ถœ๋ ฅ: [1, 2, 4, 5, 8]
		
        // ๋‚ด๋ฆผ์ฐจ์ˆœ ๊ธฐ๊ต
        int[] arr2 = {-5, -2, -8, -1, -4};	// ์›๋ž˜ ๊ฐ’์— -1์„ ๊ณฑํ•œ ๊ฐ’์„ ์‚ฌ์šฉ
        Arrays.sort(arr2);	// ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
        System.out.println("Sorted Array: " + Arrays.toString(arr2)); // ์ถœ๋ ฅ: [-8, -5, -4, -1] -> ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ, -1์„ ๊ณฑํ•ด์„œ ์‚ฌ์šฉ
    }
}

 

 

์ด์ง„ํƒ์ƒ‰
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        // ์ด์ง„ ํƒ์ƒ‰์€ ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉ
        int[] sortedArr = {1, 2, 4, 5, 8, 10, 12};

        // ๊ฐ’ 5 ์ฐพ๊ธฐ
        int index = Arrays.binarySearch(sortedArr, 5);
        System.out.println("Index of 5: " + index); // ์ถœ๋ ฅ: 3 (0๋ถ€ํ„ฐ ์‹œ์ž‘)

        // ๊ฐ’ 7 ์ฐพ๊ธฐ (์—†๋Š” ๊ฐ’)
        int indexNotFound = Arrays.binarySearch(sortedArr, 7);
        System.out.println("Index of 7: " + indexNotFound); // ์ถœ๋ ฅ: ์Œ์ˆ˜ ๊ฐ’ (์ฐพ์ง€ ๋ชปํ–ˆ์Œ์„ ์˜๋ฏธ)
    }
}

์ด์ง„ํƒ์ƒ‰์€ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค. ์ •๋ ฌ์ด ์•ˆ๋˜์–ด์žˆ๋Š” ๋ฐฐ์—ด์ด ์ฃผ์–ด์ง„๋‹ค๋ฉด sort๋กœ ์ง์ ‘ ์ •๋ ฌ ์ˆ˜ํ–‰.

Java์—์„œ๋Š” ์ด์ง„ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฉ”์„œ๋“œ๋กœ ์ œ๊ณตํ•˜์—ฌ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

BFS
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class BFSExample {
    static List<List<Integer>> graph;
    static boolean[] visited;

    public static void bfs(int startNode) {
        Queue<Integer> q = new LinkedList<>();
        q.offer(startNode);
        visited[startNode] = true;

        while (!q.isEmpty()) {
            int currentNode = q.poll();
            System.out.print(currentNode + " "); // ๋ฐฉ๋ฌธ ๋…ธ๋“œ ์ถœ๋ ฅ

            // ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค ํ™•์ธ
            for (int nextNode : graph.get(currentNode)) {
                if (!visited[nextNode]) {
                    visited[nextNode] = true;
                    q.offer(nextNode);
                }
            }
        }
    }

    public static void main(String[] args) {
        // ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ (์˜ˆ์‹œ)
        int numNodes = 5;
        graph = new ArrayList<>();
        for (int i = 0; i <= numNodes; i++) {
            graph.add(new ArrayList<>());
        }
        graph.get(1).add(2);
        graph.get(1).add(3);
        graph.get(2).add(4);
        graph.get(3).add(4);
        graph.get(3).add(5);
        graph.get(4).add(5);

        visited = new boolean[numNodes + 1]; // ๋ฐฉ๋ฌธ ๊ธฐ๋ก ๋ฐฐ์—ด

        System.out.print("BFS ํƒ์ƒ‰ ๊ฒฐ๊ณผ (1๋ถ€ํ„ฐ): ");
        bfs(1); // 1๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ BFS ์‹œ์ž‘
        System.out.println();
    }
}

 

BFS(๋„ˆ๋น„ ์šฐ์„ ํƒ์ƒ‰)์€ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์ฃผ๋ณ€์œผ๋กœ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋“ค์„ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๋ฒ”์œ„๋ฅผ ํ™•์žฅํ•˜๋Š” ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ทธ๋ž˜ํ”„๋‚˜ ํŠธ๋ฆฌ๊ตฌ์กฐ์˜ ํƒ์ƒ‰์— ์‚ฌ์šฉํ•˜๋ฉฐ, ์ตœ๋‹จ๊ฑฐ๋ฆฌ, ๋„คํŠธ์›Œํฌ ์ฐพ๊ธฐ ๋“ฑ ์ด๋™์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

 

DFS
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    static int[] numbers = {1, 2, 3};
    static int n = numbers.length; // ์ด ์ˆซ์ž์˜ ๊ฐœ์ˆ˜
    static int r = 3; // ์„ ํƒํ•  ์ˆซ์ž์˜ ๊ฐœ์ˆ˜ (3์ž๋ฆฌ ์ˆœ์—ด)
    static boolean[] visited = new boolean[n]; // ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ์ฒดํฌ
    static int[] result = new int[r]; // ํ˜„์žฌ ๋งŒ๋“ค์–ด์ง€๊ณ  ์žˆ๋Š” ์ˆœ์—ด

    // DFS (Backtracking) ํ•จ์ˆ˜
    // depth: ํ˜„์žฌ ๋ช‡ ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๊ณ  ์žˆ๋Š”์ง€ (0๋ถ€ํ„ฐ ์‹œ์ž‘)
    public static void dfs(int depth) {
        // ๊ธฐ์ € ์กฐ๊ฑด (Base Case): r๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ชจ๋‘ ์„ ํƒํ–ˆ์„ ๋•Œ
        if (depth == r) {
            // ์™„์„ฑ๋œ ์ˆœ์—ด ์ถœ๋ ฅ
            System.out.println(Arrays.toString(result));
            return; // ๋˜๋Œ์•„๊ฐ€๊ธฐ
        }

        // ์žฌ๊ท€ ํ˜ธ์ถœ ๋ถ€๋ถ„: ํ˜„์žฌ depth ์œ„์น˜์— ์–ด๋–ค ์ˆซ์ž๋ฅผ ๋„ฃ์„์ง€ ์„ ํƒ
        for (int i = 0; i < n; i++) {
            // i๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
            if (!visited[i]) {
                // 1. ์„ ํƒ (์ƒํƒœ ๋ณ€๊ฒฝ)
                visited[i] = true;      // i๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ํ‘œ์‹œ
                result[depth] = numbers[i]; // ํ˜„์žฌ depth ์œ„์น˜์— i๋ฒˆ์งธ ์ˆซ์ž ์ €์žฅ

                // 2. ํƒ์ƒ‰ (๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€์„œ ๋‹ค์Œ ์ˆซ์ž ์„ ํƒ)
                dfs(depth + 1);

                // 3. ์›๋ณต (๋ฐฑํŠธ๋ž˜ํ‚น)
                // depth+1 ์—์„œ ๋Œ์•„์˜ค๋ฉด i๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์„ ์ทจ์†Œ
                // ๊ทธ๋ž˜์•ผ ๋‹ค์Œ ๋ฐ˜๋ณต(i+1)์—์„œ ๋‹ค๋ฅธ ์ˆซ์ž๋ฅผ ์„ ํƒํ•ด์„œ ์ƒˆ๋กœ์šด ์ˆœ์—ด
                visited[i] = false;
                // result[depth]๋Š” ๋‹ค์Œ ๋ฐ˜๋ณต์—์„œ ๋ฎ์–ด์”Œ์›Œ์ง€๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๋”ฐ๋กœ ์›๋ณต ์•ˆ ํ•ด๋„ ๋จ (์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง)
            }
        }
    }

    public static void main(String[] args) {
        System.out.println("์ˆœ์—ด ์ƒ์„ฑ ๊ฒฐ๊ณผ:");
        dfs(0); // depth 0๋ถ€ํ„ฐ ์‹œ์ž‘ (์ฒซ ๋ฒˆ์งธ ์ˆซ์ž ์„ ํƒ)
        /*
        ์ถœ๋ ฅ ๊ฒฐ๊ณผ:
        ์ˆœ์—ด ์ƒ์„ฑ ๊ฒฐ๊ณผ:
        [1, 2, 3]
        [1, 3, 2]
        [2, 1, 3]
        [2, 3, 1]
        [3, 1, 2]
        [3, 2, 1]
         */
    }
}

 

DFS(๊นŠ์ด ์šฐ์„ ํƒ์ƒ‰)์˜ ๊ฒฝ์šฐ, ๊ทธ๋ž˜ํ”„๋‚˜ ํŠธ๋ฆฌ๊ตฌ์กฐ์˜ ํƒ์ƒ‰์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ๋จผ์ € ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ 

๋‹ค์Œ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์šฐ์„ ํƒ์ƒ‰ํ•œ๋‹ค.

1๋ฒˆ ๋…ธ๋“œ๊ฐ€ 2, 3, 4 ๋…ธ๋“œ์ด๊ณ  2๋ฒˆ๊ณผ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๊ฐ€ 5, 6(1์ œ์™ธ)๋ผ๋ฉด, 1->2->5 ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.

 

์œ„ ์ฝ”๋“œ๋Š” 1~3๊นŒ์ง€์˜ ์ˆซ์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์˜ ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ

DFS ํƒ์ƒ‰์€ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ์˜ ์ด์Šˆ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

 

3๋ฒˆ์˜ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ†ตํ•ด์„œ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ, ๋” ์ด์ƒ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๋‚˜ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฝ์šฐ๋งŒ ์ฐพ์•„์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•