simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바프로그래밍
  • 참조변수
  • 컨트롤러
  • 자바메모리구조
  • JVM메모리구조
  • scanner #next() #nextLine()
  • 404
  • null
  • 참조타입
  • 스프링
  • 자바프로그램
  • 자바
  • controllerTest

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

Computer Science/Algorithm

[자료구조] 스택

2022. 4. 18. 13:24

[자료구조 알고리즘] Stack 구현하기 in Java - YouTube

 

[ 스택의 활용 예 : 출처 자바의 정석 ]

수식 계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로

 

★ 문제 : 10828번: 스택 (acmicpc.net)

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

★ 스택 단계 (acmicpc.net)

 

스택 단계

주어진 문자열이 올바른 괄호열인지 판단하는 문제

www.acmicpc.net

 

■ 스택을 생성해보는 예제 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class _00_스택 {
	public static void main(String[] args) throws Exception{
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer token;
		
		//스택 인스턴스 생성
		Stack stack = new Stack();
		
		//첫번째줄 입력값(명령의 수) 
		int N = Integer.parseInt(reader.readLine()); 
		
		//명령 문자열 한 줄
		String input;
		//명령어
		String order;
		
		while (N > 0) {
			input = reader.readLine();
			token = new StringTokenizer(input);
			order = token.nextToken();
			
			//명령어에 따라 스택 메소드 실행
			if (order.equals("push")) {
				int item = Integer.parseInt(token.nextToken());
				stack.push(item);
			} else if (order.equals("pop")) {
				stack.pop();
			} else if (order.equals("size")) {
				stack.size();
			} else if (order.equals("empty")) {
				stack.empty();
			} else if (order.equals("top")) {
				stack.top();
			}
			
			N--;
		}
	}
}

class Stack {
	//노드 내부 클래스 정의
	class Node {
		private int data;
		private Node next;
	}
	
	//가장 위에 있는 노드
	private Node top;
	
	//push메소드 : 노드 삽입
	public void push(int item) {
		Node t = new Node();
		t.data = item;
		t.next = top;
		top = t;
	
	//pop메소드 : 노드 빼기 (뺄 때, 데이터값 읽기)
	public void pop() {
	    if (top == null) {
	    	System.out.println("-1");
	    }else {
	    	Node tmp = top;
	    	top = top.next;
	    	System.out.println(tmp.data);
	    }
	}//pop()
	
	//size메소드 : 노드의 갯수 반환
	public void size() {
		int count = 1;
		Node tmp = top;
		
		if (top == null) {
			System.out.println(0);
		} else {
			while(tmp.next != null) {
				tmp = tmp.next;
				count++;
			}
			System.out.println(count);
		}
	}//size()
	
	//empty메소드(isEmpty) : 노드가 있는지 여부 확인
	public void empty() {
		if (top == null) {
			System.out.println(1);
		} else {
			System.out.println(0);
		}
	}//empty()
	
	//top메소드(peek) : top노드 데이터 읽기
	public void top() {
		if (top == null) {
			System.out.println("-1");
		} else {
			System.out.println(top.data);
		}
	}//top()
	
}

 

 

'Computer Science > Algorithm' 카테고리의 다른 글

[정렬] 퀵 정렬(Quick Sort)  (1) 2022.05.10
[자료구조] 큐(Queue)  (0) 2022.04.28
[검색] 선형탐색과 이진탐색  (0) 2022.04.12
[자바의 정석] 스택과 큐  (0) 2022.03.30
[자바의 정석] ArrayList/LinkedList  (0) 2022.03.29
    'Computer Science/Algorithm' 카테고리의 다른 글
    • [정렬] 퀵 정렬(Quick Sort)
    • [자료구조] 큐(Queue)
    • [검색] 선형탐색과 이진탐색
    • [자바의 정석] 스택과 큐
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바