GiantStepDEV
article thumbnail

TreeSet<E> ํด๋ž˜์Šค

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ๋˜๋Š” ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(binary search tree)์˜ ํ˜•ํƒœ๋กœ ์š”์†Œ๋ฅผ ์ €์žฅ

์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ

  • ํŠธ๋ฆฌ๋Š” ์ž๋ฃŒ์‚ฌ์ด์˜ ๊ณ„์ฆ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ์ž์‹๋…ธ๋“œ๋Š” 0,1,2๊ฐœ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ ์˜ˆ์ œ

23, 10, 48, 15, 7, 22, 56

ํŠธ๋ฆฌ ์ƒ์„ฑ

๋ฃจํŠธ(root)-23 ๋ฅผ ๊ธฐ์ค€์œผ๋กœ root ๋ณด๋‹ค ์ž‘์œผ๋ฉด ์™ผ์ชฝ, ํฌ๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.

10์€ 23๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ, 48์€ 10๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ

15๋Š” 23๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ, 10๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ

7์€ 23๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ, 10๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ ์™ผ์ชฝ

48์€ 23๋ณด๋‹ค ํฌ๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ

  • ์œ„์™€ ๊ฐ™์ด ํŠธ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ •๋ ฌ๋˜๋ฉด์„œ ์ƒ์„ฑ์ด ๋˜๊ณ , ์ด๋ฅผ ์ค‘์œ„(Inorder) ์ˆœํšŒ๋ฅผ ํ•˜๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ๋œ ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Left - Root - Right)
7 -> 10 -> 15 -> 22 -> 48 -> 56

๐Ÿถ๊ธฐ๋ณธ ์˜ˆ์ œ1

import java.util.Iterator;
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        TreeSet<Integer> ts = new TreeSet<>();
        ts.add(23);
        ts.add(10);
        ts.add(48);
        ts.add(15);
        ts.add(7);
        ts.add(22);
        ts.add(56);
        for(Integer e : ts) System.out.print(e + " ");
        ts.remove(48); // ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
        System.out.println();
        
        // iterator() ๋กœ ์ˆœํšŒ : ๋ฐ˜๋ณต์ž (ํ–ฅ์ƒ๋œ for๋ฌธ์ด ๋‚˜์˜ค๊ธฐ ์ด์ „์— ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹
        Iterator<Integer> iterator = ts.iterator();
        while(iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
        
        // ์š”์†Œ์˜ ๊ฐฏ์ˆ˜
        System.out.println("ํฌ๊ธฐ : " + ts.size());
    }
}

๐Ÿถ๊ธฐ๋ณธ ์˜ˆ์ œ2

import java.util.Arrays;
import java.util.TreeSet;
public class Main {
    public static void main(String[] args) {
        Integer[] score = {78, 45, 60, 54, 92};
        TreeSet<Integer> ts = new TreeSet<>(Arrays.asList(score));

        System.out.println("60์  ๋ฏธ๋งŒ : " + ts.headSet(60));
        System.out.println("60์  ์ด์ƒ : " + ts.tailSet(60));
        // ์ฃผ์–ด์ง„ ์ ์ˆ˜ ๋ฐ”๋กœ ์•„๋ž˜์˜ ์ ์ˆ˜ ์ถœ๋ ฅ
        System.out.println("60์  ๋ฐ”๋กœ ์•„๋ž˜ ์ ์ˆ˜ : " + ts.lower(60));
        // ์ฃผ์–ด์ง„ ์ ์ˆ˜ ๋ฐ”๋กœ ์œ„์˜ ์ ์ˆ˜ ์ถœ๋ ฅ
        System.out.println("60์  ๋ฐ”๋กœ ์œ„ ์ ์ˆ˜ : " + ts.higher(60));
    }
}

TreeMap

  • Map ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ์ค‘ ํ‚ค ๊ฐ’์œผ๋กœ ์ž๋ฃŒ๋ฅผ ์ •๋ ฌํ•˜๋ ค๋ฉด TreeMap์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • TreeMap๋„ TreeSet๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ(๊ฐ’์ด ์ถ”๊ฐ€ ๋  ๋•Œ ์ž๋™์ •๋ ฌ)๋กœ ๊ตฌํ˜„ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • TreeMap์€ ํ‚ค ๊ฐ’์œผ๋กœ ์ •๋ ฌํ•˜๋ฏ€๋กœ ํ‚ค ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” Comparable๊ณผ Comparator๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • TreeSet๊ณผ์˜ ์ฐจ์ด์ ์€ ํ‚ค์™€ ๊ฐ’์ด ์ €์žฅ๋œ Map.Entry๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
import java.util.Map;
import java.util.TreeMap;

public class Main {
    public static void main(String[] args) {
        TreeMap<Integer, String> score = new TreeMap<>();
        score.put(87, "๋‚˜ํฌ๋„");
        score.put(88, "๊ณ ์œ ๋ฆผ");
        score.put(75, "๋ฐฑ์ด์ง„");
        score.put(65, "๊ตฌ์ž๊ฒฝ");
        score.put(98, "์šฐ์˜์šฐ");

        Map.Entry<Integer, String> entry = null;
        entry = score.firstEntry();
        System.out.println("๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜ : " + entry.getKey() + ", " + entry.getValue());
        entry = score.lastEntry();
        System.out.println("๊ฐ€์žฅ ๋†’์€ ์ ์ˆ˜ : " + entry.getKey() + ", " + entry.getValue());
        entry = score.lowerEntry(95);
        System.out.println("95์  ์•„๋ž˜ ์ ์ˆ˜ : " + entry.getKey() + ", " + entry.getValue());
        entry = score.higherEntry(95);
        System.out.println("95์  ์œ„ ์ ์ˆ˜ : " + entry.getKey() + ", " + entry.getValue());
    }
}
profile

GiantStepDEV

@kongmi

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!