์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ/๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ ๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ / java ] 10828 - ์Šคํƒ (1)

Forest Yun 2021. 6. 24. 23:37
728x90

 

์Šคํƒ ์‹คํŒจ

์‹œ๊ฐ„ ์ œํ•œ: 0.5 ์ดˆ (์ถ”๊ฐ€ ์‹œ๊ฐ„ ์—†์Œ)

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ: 256 MB

๋ฌธ์ œ

์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ๊ตฌํ˜„ํ•œ ๋‹ค์Œ, ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

๋ช…๋ น์€ ์ด ๋‹ค์„ฏ ๊ฐ€์ง€์ด๋‹ค.

  • push X: ์ •์ˆ˜ X๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
  • pop: ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • size: ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • empty: ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • top: ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ฃผ์–ด์ง€๋Š” ๋ช…๋ น์˜ ์ˆ˜ N (1 โ‰ค N โ‰ค 10,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๋ช…๋ น์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ฃผ์–ด์ง€๋Š” ์ •์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค. ๋ฌธ์ œ์— ๋‚˜์™€์žˆ์ง€ ์•Š์€ ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.

์ถœ๋ ฅ

์ถœ๋ ฅํ•ด์•ผํ•˜๋Š” ๋ช…๋ น์ด ์ฃผ์–ด์งˆ ๋•Œ๋งˆ๋‹ค, ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

import java.util.Scanner;

//2021.06.21 10828๋ฒˆ: ์Šคํƒ
//์‹œ๊ฐ„ ์ดˆ๊ณผ (์‹œ๊ฐ„์ œํ•œ 0.5์ดˆ) -> ๋น ๋ฅธ ์ž…์ถœ๋ ฅ ๊ณต๋ถ€ํ•˜๊ธฐ!! 15552 ๋ฒˆ ๋ฌธ์ œ ์ฐธ๊ณ 

public class baekjoon10828 {

	public static class linkedStack{
		private class Node{
			int data;
			Node link;
		}

		private Node top=null;
		private int count=0;

		// push X: ์ •์ˆ˜ X๋ฅผ ์Šคํƒ์— ๋„ฃ๋Š” ์—ฐ์‚ฐ์ด๋‹ค.
		public void push(int item) {//top๊ณผ newNode ๊ฐ€์ง€๊ณ  ํ•˜๊ธฐ
			Node newNode=new Node();
			newNode.data=item;
			newNode.link=top;
			top=newNode;
			count++;
		}

		//pop: ์Šคํƒ์—์„œ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ๋นผ๊ณ , ๊ทธ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 
        //๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
		public int pop() {//top๋งŒ ๊ฐ€์ง€๊ณ  ํ•˜๊ธฐ
			int data;

			if(isEmpty()==0) {
				data=top.data;
				top=top.link;
				count--;
			}
			else
				data=-1;

			return data;
		}

		//empty: ์Šคํƒ์ด ๋น„์–ด์žˆ์œผ๋ฉด 1, ์•„๋‹ˆ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.
		public int isEmpty() {
			if(top==null)//๋น„์–ด์žˆ์œผ๋ฉด
				return 1;
			return 0;
		}

		//size: ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
		public int getSize() {
			return count;
		}

		//top: ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ์ •์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 
        //๋งŒ์•ฝ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.
		public int getTop(){
			if(isEmpty()==1)
				return -1;
			return top.data;	
		}
	}

	//ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		linkedStack stack=new linkedStack();

		int instructionNum;
		instructionNum=scanner.nextInt();

		for(int i=0; i<instructionNum;i++) {
			String instruction=scanner.next();

			switch(instruction){
			case "push": 
				int item=scanner.nextInt();
				stack.push(item);
				break;
			case "pop":
				System.out.println(stack.pop());
				break;
			case "size":
				System.out.println(stack.getSize());
				break;
			case "empty":
				System.out.println(stack.isEmpty());
				break;
			case "top":
				System.out.println(stack.getTop());
				break;
			}
		}

		scanner.close();
	}
}

 

  • ์ •์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ ๊ตฌํ˜„: ์—ฐ๊ฒฐ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ ์Šคํƒ ๊ตฌํ˜„ 
  • static ํด๋ž˜์Šค๋กœ ์Šคํƒ ๊ตฌํ˜„
  • switch๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด๋ณ„ ๊ฐ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  • ํ‹€๋ฆฐ ๋ถ€๋ถ„: ์‹œ๊ฐ„ ์ดˆ๊ณผ

 

 

 




 

 

 

 

1. ์Šคํƒ (stack)

  • ์ ‘์‹œ๋ฅผ ์Œ“๋“ฏ์ด ์ž๋ฃŒ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„์˜ฌ๋ฆฐ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ
  • ํ›„์ž…์„ ์ถœ ๊ตฌ์กฐ(LIFO: Last-In First-out) โ†’ top ์—์„œ๋งŒ ์ €์žฅ๋œ ์›์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • top : ์Šคํƒ์˜ ๊ฐ€์žฅ ์œ„์— ๋†“์ธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. 
  • ์Šคํƒ์˜ ์—ฐ์‚ฐ:
    • push(s, item) : ์‚ฝ์ž…, ์Šคํƒ s์— item(์›์†Œ)์„ ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ
    • pop(s) : ์‚ญ์ œ, ์Šคํƒ s์˜ top์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ๋ฆฌํ„ดํ•˜๋Š” ์—ฐ์‚ฐ
    • + ์ถ”๊ฐ€ ์—ฐ์‚ฐ - peek(s) : ์Šคํƒ s์˜ top์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋ฆฌํ„ดํ•˜๋Š” ์—ฐ์‚ฐ
  • ์Šคํƒ์˜ ๊ตฌํ˜„:
    • ์ˆœ์ฐจ ์ž๋ฃŒ๊ตฌ์กฐ - 1์ฐจ์› ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„. ๋‹จ์ ) ๊ณต๊ฐ„ ๋‚ญ๋น„ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ, ํฌ๊ธฐ ๋ณ€๊ฒฝ ๋น„ํšจ์œจ์ 
    • ์—ฐ๊ฒฐ ์ž๋ฃŒ๊ตฌ์กฐ - ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„. ์Šคํƒ์˜ ์›์†Œ ํ•˜๋‚˜ = ๋…ธ๋“œ ํ•˜๋‚˜

 

 

 


 

 

1.1 ์Šคํƒ์˜ ๊ตฌํ˜„ - ์—ฐ๊ฒฐ ์ž๋ฃŒ๊ตฌ์กฐ

  • ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„
    • ์Šคํƒ ์›์†Œ ํ•˜๋‚˜ = ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋…ธํŠธ ํ•˜๋‚˜
  • ์ˆœ์ฐจ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋‹จ์  ๊ทน๋ณต ๊ฐ€๋Šฅ 
  • ๋ณ€์ˆ˜ top :  ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜
    • empty ์ƒํƒœ : top == null (์ดˆ๊ธฐ์ƒํƒœ)
    • full ์ƒํƒœ : ์ •์˜๋˜์ง€ ์•Š์Œ
  • ์—ฐ๊ฒฐ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ ์Šคํƒ ์—ฐ์‚ฐ
    • push(s, item) : ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์Šคํƒ s์˜ ๊ฐ€์žฅ ์•ž์— data ๊ฐ’์œผ๋กœ item์„ ๊ฐ€์ง„ ๋…ธ๋“œ ์‚ฝ์ž…. <์†Œ์š”์‹œ๊ฐ„ O(1)>
    • pop(s) : ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์Šคํƒ s์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ ์‚ญ์ œ. ์ฆ‰, top์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๋…ธ๋“œ ์‚ญ์ œ ํ›„ ๋ฆฌํ„ด

 

public class MyLinkedStack {
	private Node top =null //๊ณต๋ฐฑ ์Šคํƒ ์ƒ์„ฑ
    
    private class Node{//Nodeํด๋ž˜์Šค
    	char data;
        Node link
    }
    
    public boolean isEmpty(){
    if(top == null)  //empty ์ƒํƒœ : top == null
    	return true;
    else
    	return false;
    }
    
    public void push(char item){//top๊ณผ item๋งŒ ์ด์šฉํ•˜์—ฌ ์Šคํƒ์— ์‚ฝ์ž…
    	Node newNode= new Node();//์‚ฝ์ž…ํ•  item๋ฅผ ์ €์žฅํ•  ์ƒˆ ๋…ธ๋“œ ์ƒ์„ฑ
    	newNode.data=item; //์ƒˆ ๋…ธ๋“œ์˜ data์— item ์ €์žฅ
        newNode.link=top;
        /*
        ๋งŒ์•ฝ ๊ณต๋ฐฑ ์Šคํƒ์ผ ๊ฒฝ์šฐ top์€ null, 
        ์ƒˆ ๋…ธ๋“œ๋Š” ํ•ด๋‹น ์Šคํƒ์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ์ด์ž ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ด๋ฏ€๋กœ link์— null ์ €์žฅํ•ด์•ผ ํ•จ
        
        ๊ณต๋ฐฑ ์Šคํƒ์ด ์•„๋‹ ๊ฒฝ์šฐ top์€ ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด
        ์ƒˆ ๋…ธ๋“œ๋Š”  ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•˜๋ฏ€๋กœ top, 
        ์ฆ‰ ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” link๋ฅผ ๋ฐ›์•„ ์ด์ „ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
        */
        top=newNode; //top์ด ์ƒˆ ๋…ธ๋“œ, ์ฆ‰ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
    }
    
    public char pop(){ //top์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ญ์ œ ํ›„ ๋ฆฌํ„ด
    	if(isEmpty())
        	์˜ˆ์™ธ ๋ฐœ์ƒ;
        else{
        	char item=top.data; //top์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ์˜ data๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•œ๋‹ค.
            top=top.link; //top์ด ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ์˜ link, ์ฆ‰ ๋‘๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค.
            //์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ๋…ธ๋“œ๋Š” ๋‹ค๋ฅธ ๋…ธ๋“œ์™€์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ํ•ด๋‹น ๋…ธ๋“œ๋Š” ์‚ญ์ œ๋œ๋‹ค.
            return item;
        }
    }
}

 

 




 

 

 

๊ณต๋ถ€ ์ž๋ฃŒ
์ž๋ฐ”๋กœ ๋ฐฐ์šฐ๋Š” ์‰ฌ์šด ์ž๋ฃŒ๊ตฌ์กฐ, ์ „๊ณต ์ˆ˜์—…
728x90