minlog
article thumbnail

 

 

์ž๋ฃŒ๊ตฌ์กฐ

๐Ÿ’ก Iterator 
์ˆœ์„œ(์ธ๋ฑ์Šค)๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•ด์ฃผ๋Š” for๋ฌธ๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•ด์„œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ ( ์‚ฌ์šฉ : Set, Collection )

 

์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ฏธ์ง€๋กœ ํ™•์ธํ•ด๋ณด๊ธฐ

 

Data Structure Visualization

 

www.cs.usfca.edu

 

1. ์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

  • ์ž๋ฃŒ๊ตฌ์กฐ(data structure)

๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•ด๋‘” ๊ฒƒ

 

1-1. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜

  • ๋ฆฌ์ŠคํŠธ(list) : ๋ฐฐ์—ด ๋ฆฌ์ŠคํŠธ(array list), ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list)๋กœ ์„ธ๋ถ„๋จ
  • ์Šคํƒ(stack)
  • ํ(queue)
  • ํ•ด์‰ฌ ํ…Œ์ด๋ธ”(hashtable)
  • ์ง‘ํ•ฉ(set) * ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์•„๋‹˜

์ž๋ฐ”์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ - list ,map,set

ํŠน์„ฑ์— ๋งž๊ฒŒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒ

 


 

2. List

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋‹ค. ์ค‘๋ณต์ด ํ—ˆ์šฉ๋œ๋‹ค.
  • ์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด๋ณด๋‹ค ๋งŽ์ด ์‚ฌ์šฉโ˜…

2-1. ArrayList

๐Ÿ’ก ArrayList  list = new ArrayList();

 

< ๋ฐ์ดํ„ฐํ˜• > → ์žฌ๋‚ด๋ฆญ : ํƒ€์ž… ํŒŒ๋ผ๋ฏธํ„ฐ → ํ•ด๋‹น ํƒ€์ž…๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ์„ ์–ธํ•ด์คŒ.

String /Integer/Byte/Short/Long /Char/

๋ฉ”์„œ๋“œ ์˜๋ฏธ ์˜ˆ์‹œ
add ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถ”๊ฐ€  list.add(”ํฌ๋„”)
์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๊ฐ’ ์ถ”๊ฐ€  list.add(1,”์ˆ˜๋ฐ•”);
remove ๋ฐ์ดํ„ฐ ์‚ญ์ œ list.remove(0);
 list.remove(”ํฌ๋„”);
set ๋ฐ์ดํ„ฐ ๊ต์ฒด  list.set(0,”์˜ค๋ Œ์ง€”);
get ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถœ๋ ฅ list.get(2);
subList
ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ listNumber.subList(0, 2)
size ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜ ์ถœ๋ ฅ   list.size();
clear ๋ฐ์ดํ„ฐ ์ „์ฒด ์‚ญ์ œ list.clear();
indexOf ๋ช‡ ๋ฒˆ์— ์žˆ๋Š”์ง€  ๋ฌธ์ž์—ด.indexOf(list);
Collections.sort(๋ฆฌ์ŠคํŠธ); ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ Collections.sort(list);
Iterator listIter = list.iterator();
๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ „์ฒด ์ถœ๋ ฅ ๋ฐฉ๋ฒ•  
addAll ๋ฆฌ์ŠคํŠธ ๋ณ‘ํ•ฉ (๋ฆฌ์ŠคํŠธ + ๋ฆฌ์ŠคํŠธ) listNumber.addAll(listNumber2);
 

 

- List ์ƒ์„ฑ

๋”๋ณด๊ธฐ
//1.์ •์ˆ˜ํ˜• ๊ฐ์ฒด๋งŒ ์ €์žฅ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ
ArrayList<Integer> numbers1 = new ArrayList<Integer>();

// 2. ์ดˆ๊ธฐ ์šฉ๋Ÿ‰ ์ง€์ • numbers2
ArrayList<Integer> numbers2 = new ArrayList<Integer>(20);

// 3. ๋ฐฐ์—ด์„ ๋„ฃ์–ด์„œ ์ƒ์„ฑ
    //Arrays.asList(10,20,30) ๋ฐฐ์—ด ์ƒ์„ฑ 
ArrayList<Integer> numbers3 = new ArrayList<Integer>(Arrays.asList(10,20,30));

// 4. ๋‹ค๋ฅธ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ถ€ํ„ฐ ๊ทธ๋Œ€๋กœ ์š”์†Œ๋ฅผ ๋ฐ›์•„์™€ ์‚ฌ์šฉ. 
ArrayList<Integer> numbers4 = new ArrayList<Integer>(numbers3);

 

- List ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ

๋”๋ณด๊ธฐ
List<String> list = new ArrayList<String>();
list.add("์‚ฌ๊ณผ");
list.add("ํฌ๋„");
list.add("์ˆ˜๋ฐ•");

//์ถœ๋ ฅ๋ฐฉ๋ฒ• 1
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}
System.out.println("==========================");
//์ถœ๋ ฅ ๋ฐฉ๋ฒ•2 .Iterator   (List,Map,Set)--> ํ†ต์šฉํ•ด์„œ ์ถœ๋ ฅ 
Iterator<String> iter = list.iterator(); //Iterator๋กœ ๋ฐ์ดํ„ฐํ˜• ๋ณ€ํ™˜

while (iter.hasNext()) { // ์žˆ๋Š” ๊ฐ’ํ™•์ธ
    System.out.println(iter.next());
}


System.out.println(list.subList(0, 2));
//[์‚ฌ๊ณผ, ํฌ๋„]

 

- List ๋ณ‘ํ•ฉ
 
// ๋™์ ํ• ๋‹น		
List<Number> listNumber = new ArrayList<Number>();
listNumber.add(10);
listNumber.add(20);
listNumber.add(30);
System.out.println(listNumber.size());

List<Number> listNumber2 = new ArrayList<Number>();
listNumber2.add(60);
listNumber2.add(70);
listNumber2.add(80);


//๋ฆฌ์ŠคํŠธ ๋ณ‘ํ•ฉ = ๋ฆฌ์ŠคํŠธ + ๋ฆฌ์ŠคํŠธ 
listNumber.addAll(listNumber2);
System.out.println(listNumber.size()); // 6๊ฐœ
 

 

2-1. ArrayList VS LinkeList

ArrayList(์„ ํ˜• ๋ฆฌ์ŠคํŠธ )

  • ์—ฐ์†ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ
  • ๋‚ด๋ถ€์ ์œผ๋กœ Object[] ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์š”์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.
  • ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 
  • ๋ฐ์ดํ„ฐ ์ ์žฌ๋Ÿ‰์— ๋”ฐ๋ผ ๊ฐ€๋ณ€์ ์œผ๋กœ ๊ณต๊ฐ„์„ ๋Š˜๋ฆฌ๊ณ  ์ค„์ธ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„์— ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ,๋นˆ๊ณต๊ฐ„์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ๋‚ด๋ถ€์—์„œ ์ธ๋ฑ์Šค๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ณผ์ •์ด ์žˆ์–ด ๋™์ž‘์ด ๋Š๋ฆฌ๋‹ค.
  • ์กฐํšŒ๊ธฐ๋Šฅ์— ์ ํ•ฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ด๋‹ค.   ์ „์ฒด๋ฅผ ์ˆœํšŒํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ. (ex.๊ธ€ ๋ชฉ๋ก)

 

LinkeList(์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

  • ์ด์ „ , ๋‹ค์Œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ)
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ์ˆ˜์‹œ๋กœ ์ˆ˜์ • ์‚ญ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ผ์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ(๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐํ•˜๋Š” ๊ตฌ์กฐ) , ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ’์ด ์ €์žฅ(์†๋„๊ฐ€ ๋” ๋น ๋ฆ„)
  • ์ถ”๊ฐ€/ ์‚ญ์ œ ์‹œ ์—ฐ๊ฒฐ์„ ๋ˆ๊ณ  ๋‹ค์‹œ ์—ฐ๊ฒฐํ•œ๋‹ค.
  • ๋‹จ์   ์ž„์˜์˜ ์š”์†Œ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์„ฑ๋Šฅ์€ ์ข‹์ง€ ์•Š๋‹ค. 
  • ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์œ ์ง€๋˜๊ณ  ์ค‘๋ณต ํ—ˆ์šฉ

 

  • ๋ฆฌ์ŠคํŠธ ์ถ”๊ฐ€  :  addFirst(Object),addLast(Object),  add(Object), add(index,Object), addAll(Collection c)
  • ๋ฆฌ์ŠคํŠธ ์ œ๊ฑฐ : removeFirst(), removeLast(),remove(Object),remove(index)
//๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉ
LinkedList<Integer> list1 = new LinkedList<Integer>();
LinkedList<Integer> list2 = new LinkedList<Integer>(Arrays.asList(1,2));


LinkedList<String> list3 = new LinkedList<String>(Arrays.asList("J","A","B"));
//  addFirst(Object),addLast(Object), 
// add(Object), add(index,Object), addAll(Collection c)
System.out.println(list3);

list3.addFirst("R");
System.out.println(list3);

list3.addLast("t");
System.out.println(list3);

// ๋ฐฐ์—ด ์ถœ๋ ฅํ•˜๊ธฐ 
Iterator<String> it = list3.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

 


 

3.  Set

๐Ÿ’ก TreeSet list = new TreeSet ();

  • ์ง‘ํ•ฉ์œผ๋กœ ์ค‘๋ณต x
  • ์œ ์ผํ•œ ๊ฐ’๋“ค์„ ๊ด€๋ฆฌํ• ๋•Œ ์‚ฌ์šฉ (ex.์ฃผ๋ฏผ๋ฒˆํ˜ธ)
  • ์ˆœ์„œ๊ฐ€ ์—†๋‹ค. —> get์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋‹ค… Iterator๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.
  • HashSet, TreeSet
  • ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๊ฐ’์„ ์ •๋ ฌํ•ด ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ
  • ๋‹ค๋ฅธ set๋ณด๋‹ค ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์‹œ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.
๋ฉ”์„œ๋“œ ์˜๋ฏธ  ์˜ˆ์‹œ
add ๋ฐ์ดํ„ฐ ๊ฐ’ ์ถ”๊ฐ€  list.add(”ํฌ๋„”)
System.out.println(list); ๋ฐ์ดํ„ฐ ์ „์ฒด ์ถœ๋ ฅ  

 

TreeSet<Integer> listTree = new TreeSet<Integer>();
System.out.println("-------------------");
for (int i = 0; i < 6; i++) {
    listTree.add((int)(Math.random()*45)+1);
}

System.out.println(listTree);

 


 

4. Map

Hashtable(Properties), HashMap, TreeMap

๐Ÿ’ก Map<String, Integer> map = new HashMap<String, Integer>();

  • < key, value > ํ•œ ๊ฐœ์˜ ์Œ์œผ๋กœ ํ‘œํ˜„ (ex) ์ด๋ฆ„, ์ „ํ™”๋ฒˆํ˜ธ
  • ์ˆœ์„œ๊ฐ€ ์—†๋‹ค.
๋ฉ”์„œ๋“œ ์˜๋ฏธ ์˜ˆ์‹œ
put ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ map.put("ํ™๊ธธ๋™" , 01011112222);
get ๋ฐ์ดํ„ฐ ๊ฐ’ ํ™•์ธ map.get("ํ™๊ธธ๋™"); map.get(01011112222);
contentKey ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น key ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ contentKey(”ํ™๊ธธ๋™”)
contentsValue ๋ฐ์ดํ„ฐ์— ํ•ด๋‹น value ๊ฐ’์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€ contentsValue(01011112222)

 

โ˜… ๋ฐ์ดํ„ฐ๊ฐ’ ์ถœ๋ ฅ

๋ฐ์ดํ„ฐ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด Map ๋ฐ์ดํ„ฐ ํ˜•์—์„œ Set ๋˜๋Š” Collection ๋ฐ์ดํ„ฐ ํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

์ด๋•Œ set ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ์ˆ˜ ์žˆ๋Š” ์ „์ฒด ๊ฐ’( .entrySet() )๊ณผ ํ‚ค( .keySet() )๊ฐ’์€ Set ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ถœ๋ ฅ.

value๊ฐ’์€ ๋ฉ”์„œ๋“œ( .values() )๋ฅผ ์‚ฌ์šฉํ•ด Collection ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์‹œ

๋”๋ณด๊ธฐ

 

  1. ์ „์ฒด ์ถœ๋ ฅ key, value→ Iterator ๋ฅผ ํ†ตํ•ด ๊ฐ๊ฐ ์ถœ๋ ฅ ๊ฐ€๋Šฅ
  2. //์ „์ฒด ๋ฐ์ดํ„ฐ๊ฐ’ ์ถœ๋ ฅ (key,value) Set set = map.entrySet(); Iterator iter = set.iterator(); //key,value while (iter.hasNext()) { //map์˜ ์•ˆ์— value ์™€ ํ‚ค์˜ ๋ฌถ์Œ ํ•˜๋‚˜ -> ๋ฐ์ดํ„ฐํƒ€์ž…์€ Map.Entry (.)์  -> ๋‚ด๋ถ€ ํด๋ž˜์Šค , ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค //Map์˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค Entry Map.Entry<String, String> e = (Map.Entry<String, String>)iter.next(); System.out.println("key: " + e.getKey() +" , value: " + e.getValue()); }
  3. Setํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ → entrySet() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์ฒด๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.
  4. key ๊ฐ’ ๋งŒ ์ถœ๋ ฅ
     Set<String> keyinput = list.keySet();
     System.out.println(keyinput);
  5. Setํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ -> keySet() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ถœ ๊ฐ€๋Šฅ.
  1. value๊ฐ’ ๋งŒ ์ถœ๋ ฅ
     Collection<Integer> listScore = list.values();
     System.out.println(listScore);
  2. Collection ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ → values() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ถœ ๊ฐ€๋Šฅ.

 

Collections

์ตœ๋Œ€๊ฐ’→ int max= Collections.max(listScore);
์ตœ์†Œ๊ฐ’ → int min= Collections.min(listScore);

 


 

5.  hashtable

๊ฐ€์žฅ ์ฒ˜์Œ ๋„ฃ์€ ๊ฒƒ์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ

 


 

 

6. Stack

๐Ÿ’ก Stack s = new Stack();

FILO(First-In-Last-Out : ์„ ์ž…ํ›„์ถœ)" ํ˜น์€ "LIFO(Last-In-First-Out : ํ›„์ž…์„ ์ถœ์ด๋ผ๊ณ ํ•œ๋‹ค. 

  • ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๊ฒƒ์„ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ
  • ex) ๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ๊ฐ€๊ธฐ, ์žํŒ๊ธฐ

 

๋ช…๋ น์–ด ์˜๋ฏธ ์˜ˆ์‹œ
push ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ list.push(”ํฌ๋„”);
pop ๋ฐ์ดํ„ฐ ๊ฐ’ ์ œ๊ฑฐ list.pop();
//stack >> push,pop
Stack<Integer> s = new Stack<Integer>(); //stack ์ž๋ฃŒ๊ตฌ์กฐ

s.push(1);
s.push(2);
s.push(3);
System.out.println("=========================stack");
while (!s.isEmpty()) { //isEmpty ๋น„์–ด ์žˆ๋Š”์ง€ ์•ˆ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ.

    System.out.println(s.pop()); //pop๋ฝ‘์•„๋‚ด๊ธฐ

}

 

 

์˜ˆ์ œ ) ๊ด„ํ˜ธ๊ฐ€ ์ผ์น˜/๋ถˆ์ผ์น˜ ํŒ๋‹จ.

๋”๋ณด๊ธฐ
  • package kosta.data; import java.util.Scanner; import java.util.Stack; public class StackExam { public static void main(String[] args) { // ํ‚ค๋ณด๋“œ๋กœ๋ถ€ํ„ฐ ์ˆ˜์‹์„ ์ž…๋ ฅ //((2+3)+10) ==> ๊ด„ํ˜ธ๊ฐ€ ์ผ์น˜/๋ถˆ์ผ์น˜ ํŒ๋‹จ... Scanner sc = new Scanner(System.in); Stack<String> stack = new Stack<String>(); System.out.println("์ˆ˜์‹ ์ž…๋ ฅ : "); String str = sc.nextLine(); try { for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch == '(') { stack.push(ch + ""); }else if(ch == ')') { stack.pop(); } } if (stack.isEmpty()) { System.out.println("๊ด„ํ˜ธ๊ฐ€ ์ผ์น˜"); }else { System.out.println("๊ด„ํ˜ธ๊ฐ€ ๋ถˆ์ผ์น˜"); } } catch (Exception e) { System.out.println("๊ด„ํ˜ธ๊ฐ€ ๋ถˆ์ผ์น˜"); } } }

Stack ๋ฌธ์ œ 

๋”๋ณด๊ธฐ

๋ฌธ์ œ

Stack์€ "๋”๋ฏธ"๋ž€ ๋œป์„ ๊ฐ€์ง„๋‹ค.
์ฑ… ๋”๋ฏธ, ์‹ ๋ฌธ ๋”๋ฏธ ๋“ฑ์— ์‚ฌ์šฉํ•˜๋Š” ๋‹จ์–ด์ด๋‹ค. 
์ฑ… ๋”๋ฏธ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด์ž. 
์ฑ… ๋”๋ฏธ๋ฅผ ์Œ“์•˜๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ์ด ์ฑ… ๋”๋ฏธ์—์„œ ์ฑ…์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฐ€์žฅ ์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์€ ์ œ์ผ ์œ„์— ์žˆ๋Š” ์ฑ…์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋‹ค์‹œ ๋งํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์ฑ…์€ ๊ฐ€์žฅ ๋‚˜์ค‘์— ๊บผ๋‚ผ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
์ด๋Ÿฐ์‹์œผ๋กœ ์ž๋ฃŒ๊ฐ€ ๊ฐ€์žฅ ๋ฐ‘์— ์Œ“์ด๊ณ (์ž…๋ ฅ). ์ž๋ฃŒ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ(์ถœ๋ ฅ)๋Š” ๊ฐ€์žฅ ์œ„(์ตœ๊ทผ)์˜ ์ž๋ฃŒ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ Stackํ•˜๊ณ  ํ•œ๋‹ค. 
์ด๋Ÿฌํ•œ Stack์˜ ํŠน์ง• ๋•Œ๋ฌธ์— ํ”ํžˆ "FILO(First-In-Last-Out : ์„ ์ž…ํ›„์ถœ)" ํ˜น์€ "LIFO(Last-In-First-Out : ํ›„์ž…์„ ์ถœ)"๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Stack์„ ์„ค๊ณ„ํ•˜๊ณ  ๋‹ค์Œ์˜ ์ฒ˜๋ฆฌ์กฐ๊ฑด์— ๋งž๋Š” ์ถœ๋ ฅ์„ ํ•˜์‹œ์˜ค.

์ฒ˜๋ฆฌ์กฐ๊ฑด

์ฃผ์–ด์ง„ ๋ช…๋ น์€ ๋‹ค์Œ์˜ 3๊ฐ€์ง€์ด๋‹ค.
1. "i a"๋Š” a๋ผ๋Š” ์ˆ˜๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค. ์ด๋•Œ, a๋Š” 10,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.
2. "o"๋Š” ์Šคํƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด, "empty"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
3. "c"๋Š” ์Šคํƒ์— ์Œ“์—ฌ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜์ด๋‹ค. (1≤N≤100)
๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N+1์ค„๊นŒ์ง€ N๊ฐœ์˜ ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๊ฐ ๋ช…๋ น์— ๋Œ€ํ•œ ์ถœ๋ ฅ ๊ฐ’์„ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.
์ถœ๋ ฅ๋‚ด์šฉ์ด ํ•˜๋‚˜๋„ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์ฃผ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

code

package jungolEx.stack;

import java.util.Scanner;

public class stackEx01 {

	private static Scanner in;
	public static int[] result;
	
	public static void main(String[] args) {
		//https://jungol.co.kr/problem/1102
		
		in= new Scanner(System.in);
		
		
		// ์Šคํ…
		int stack1[] = new int[100];
		// ์Šคํ… ์ธต - ์Œ“์ธ ๋ฐ์ดํ„ฐ ์ˆ˜ ์ฑ„ํฌ 
		int nIndex =0;
		
		//๋ช…๋ น์–ด ์ˆ˜ 
		int n = in.nextInt();
		//๋ช…๋ น
		String cmd; 
		
		in.nextLine(); // ๊ฐœํ–‰๋ฌธ์ž ์ œ๊ฑฐ
	
		
		for(int i=0; i < n ;i++) {
			
			cmd = in.nextLine(); 
			
			// insert
			if('i' == (cmd.toCharArray()[0])) {
				System.out.println("0");
				stack1[nIndex++] = cmd.toCharArray()[2];
				
			}
			// out
			else if("o".equals(cmd)) {
				System.out.println("1");
				if(nIndex == 0) System.out.println("empty");
				else System.out.println( stack1[--nIndex] );
				
			}
			//count 
			else if("c".equals(cmd)) {
				System.out.println("2");
				System.err.println(nIndex);
			}
			
		} // end for 
	}
}

 

 


 

7. Queue

  • ์„ ์ž…์„ ์ถœ(FIFO - First In First Out)
  • ๊ฐ€์žฅ ์ฒ˜์Œ ๋„ฃ์€ ๊ฒƒ์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ค๋„๋ก ํ•˜๋Š” ๊ฒƒ
  • ex) ๋ฐฐ๋‹ฌ ์‹œ์Šคํ…œ

 

๋ช…๋ น์–ด ์˜๋ฏธ ์˜ˆ์‹œ
offer ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€  list.offer(”ํฌ๋„”);
poll ๋ฐ์ดํ„ฐ ๊ฐ’ ์ œ๊ฑฐ llist.poll();
//Queue >> offer ,poll
LinkedList<Integer> q = new LinkedList<Integer>(); //Queue ์ž๋ฃŒ๊ตฌ์กฐ
q.offer(1);
q.offer(2);
q.offer(3);
System.out.println("=========================Queue");
while (!q.isEmpty()) {
    System.out.println(q.poll());
}

 

 


 

8. ์ •๋ ฌ(sorting)

List , Set์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ…

ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ์ •๋ ฌ์„ ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ํ•„์š”.

Collections.sort(๋ฆฌ์ŠคํŠธ๋ช…);  >> ์ •๋ ฌ

  • ๊ธฐ๋ณธ ์ •๋ ฌ ์กฐ๊ฑด : ์ธํ„ฐํŽ˜์ด์Šค Comparable > compareTo() ์˜ค๋ฒ„๋ผ์ด๋”ฉ
  • package kosta.data; public class Member3 implements Comparable<Member3> { String name; int age; String address;
    public Member3(String name, int age, String address) {
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }


    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public int compareTo(Member3 o) {
        if (age < o.age) {
            return -1; // ์•ˆ์›€์ง์ž„
        }else if(age > o.age){
            return 1; // ๋ณ€ํ™”
        }
        return 0;
    }


}
```

```java
package kosta.data;

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

public class MemberMain3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        List<Member3> mlist = new ArrayList<Member3>();
        mlist.add(new Member3("๊ธธ๋™์ด", 20, "์„œ์šธ"));
        mlist.add(new Member3("ํ™์”จ", 30, "๋‚จ์–‘์ฃผ"));        
        mlist.add(new Member3("๋ฐ•์”จ", 10, "๊ฒฝ๊ธฐ"));


        Collections.sort(mlist);

        for (Member3 m : mlist) {
            System.out.println(m.getAge());
        }

    }

}
>>๊ฒฐ๊ณผ๊ฐ’ : ๋ฐ•,๊ธธ,ํ™
```
  • ์ •๋ ฌ๊ธฐ์ค€์„ ๋ณ€๊ฒฝ : ์ธํ„ฐํŽ˜์ด์Šค Comparator -> compare() ์˜ค๋ฒ„๋ผ์ด๋”ฉ.compareTo //์‚ฌ์ „์ ์œผ๋กœ..
    //0 -> ์„œ๋กœ๊ฐ™๋‹ค
    //์Œ์ˆ˜ -> aa.compareTo(BB);
    //์–‘์ˆ˜ -> BB.compareTo(aa);
  • //์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ. Collections.sort(mlist, new Comparator<Member3>() { @Override public int compare(Member3 o1, Member3 o2) { if (o1.getName().compareTo(o2.getName()) > 0) { //o1์ด๋” ํฌ๋‹ค.. return 1; //์ž๋ฆฌ๋ณ€๊ฒฝ }else if(o1.getName().compareTo(o2.getName()) < 0) { //o2์ด๋” ํฌ๋‹ค.. return -1; } return 0; } }); >> ๊ฒฐ๊ณผ๊ฐ’ : ๊ธธ , ๋ฐ•, ํ™

 

profile

minlog

@jimin-log

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