강잇
강이의 개발블로그
강잇
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • Langauge (32)
      • Java-basic (29)
      • Java (3)
    • SpringBoot (7)
    • Algorithm (5)
      • BAEKJOON (5)
    • WEB (7)
      • HTML & CSS (7)
    • DB (1)
      • MySQL (1)
    • OS (17)
      • Mac (2)
      • Linux (4)
      • Terminal Command (11)
    • Computer Science (7)
      • Hard ware (1)
      • Database (1)
      • Data structure (2)
      • Algorithm (2)
      • Network (1)
    • Git (5)
      • 개념 (1)
      • 활용 (1)
      • Trouble Shooting (2)
    • ETC. (13)
      • Install (6)
      • IntelliJ (1)
      • Eclipse (2)
      • Error (3)
      • Tip (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 메소드
  • CSS 박스 크기 설정
  • 백준
  • CSS 속성
  • til
  • 알고리즘 공부
  • 메서드
  • 자바

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
강잇

강이의 개발블로그

[백준] 10828번 : 스택 [Java - 자바]
Algorithm/BAEKJOON

[백준] 10828번 : 스택 [Java - 자바]

2022. 7. 25. 00:21

 

알고리즘 및 자료구조를 공부하면서 복습을 위해 문제를 풀고 있습니다.

https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net


Stack을 학습 후 스스로 구현할 수 있을까라는 생각에 풀어본 백준 문제

시간 제한이라는 조건을 신경쓰면서 문제 해결

Stack을 구현한 클래스와 실행을 담당할 클래스로 나눠서 문제를 풀었다.


Stack 구현 : Stack

예외 처리를 할까 고민했지만.. 별다른 요구사항이 안 보여서 예외처리는 따로 작성 안 함..

class Stack {
    private int[] stk; // 정수가 저장될 배열
    private int capacity; // 배열의 크기
    private int ptr; // 위치를 가리키는 변수
    // 생성자
    public Stack(int capacity) {
        this.capacity = capacity;
        stk = new int[this.capacity];
        ptr = 0;
    }
    // push X : 정수 X를 스택에 넣는 연산
    public int push(int x)  {
        return stk[ptr++] = x;
    }
    // pop : 스택에서 가장 위에 있는 정수를 빼고 그 수를 출력하며 정수가 없을 경우 -1 출력
    public int pop() {
        if (ptr < 1) {
            return -1;
        }
        return stk[--ptr];
    }
    // size : 스택에 들어 있는 정수의 개수를 출력
    public int size() {
        return ptr;
    }
    // empty : 스택이 비어있으면 1, 아니면 0을 출력
    public int isEmpty() {
        if (ptr == 0) {
            return 1;
        }
        return 0;
    }
    // top : 스텍의 가장 위에 있는 정수를 출력 정수가 없을 경우 -1 출력
    public int top() {
        if (ptr < 1) {
            return -1;
        }
        return stk[ptr - 1];
    }
}

실행 : Main

스택의 저장 용량은 테스트 케이스 횟수로 지정

시간제한으로 인해 Scanner가 아닌 BufferedReader를 이용해서 입력 받음

문자열로 입력이 들어와 각 명령어에 맞게 메서드를 호출해야 하므로 StringTokenizer 사용 -> 입력에 맞게 각 메서드 호출

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int capacity = Integer.parseInt(br.readLine());
        Stack stk = new Stack(capacity);

        int i = 0;
        while (i < capacity) {
            st = new StringTokenizer(br.readLine());
            switch (st.nextToken()) {
                case "push":
                    stk.push(Integer.parseInt(st.nextToken()));
                    break;
                case "pop":
                    System.out.println(stk.pop());
                    break;
                case "size":
                    System.out.println(stk.size());
                    break;
                case "empty":
                    System.out.println(stk.isEmpty());
                    break;
                case "top":
                    System.out.println(stk.top());
                    break;
            }
            i++;
        }
        br.close();
    }
}

제출 결과

런타임 에러....인텔리제이에서 진행할 경우 패키지랑 클래스명 여러 번 확인하기...!

StringBuilder 클래스를 이용해서 문자열을 처리 -> StringTokenizer를 이용해서 문자열 처리 : 시간 단축, 코드 간결?해짐

저작자표시 (새창열림)

'Algorithm > BAEKJOON' 카테고리의 다른 글

[백준] 3273 두 수의 합 - Java  (0) 2022.07.02
[백준] 2559 수열  (0) 2022.06.25
[백준] 11659 구간 합 구하기 4 - Java  (0) 2022.06.24
[백준] 11660 구간 합 구하기 5 - Java  (0) 2022.06.23
    'Algorithm/BAEKJOON' 카테고리의 다른 글
    • [백준] 3273 두 수의 합 - Java
    • [백준] 2559 수열
    • [백준] 11659 구간 합 구하기 4 - Java
    • [백준] 11660 구간 합 구하기 5 - Java
    강잇
    강잇
    학습한 내용을 정리 및 기록하는 블로그

    티스토리툴바