본문 바로가기
스터디일지/JAVA

[2023.07.26] StringTokenizer / Queue & Deque / Stack

by 똥쟁이핑크 2023. 7. 26.

https://teresa88.tistory.com/44

 

[자바] 18258번 큐2

https://www.acmicpc.net/problem/18258 18258번: 큐 2 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고,

teresa88.tistory.com

https://teresa88.tistory.com/45

 

[자바] 10773번 제로

https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우

teresa88.tistory.com

https://teresa88.tistory.com/46

 

[자바] 10828번 스택

https://www.acmicpc.net/problem/10828 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 10

teresa88.tistory.com

https://teresa88.tistory.com/47

 

[자바] 1002번 터렛

https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다. www.acmi

teresa88.tistory.com

 

1. StringTokenizer

  • 입력을 받았을 때 공백, 컴마 등등 구분자로 구분된 문자열을 나누고 싶을 때 사용한다.

https://media.geeksforgeeks.org/wp-content/cdn-uploads/StringTokenizer.png

  • 문자열을 토큰화 한다.
  • import java.util. * 또는 import java.util.StringTokenizer로 사용할 수 있다.
  • 전체 토큰을 print 할 경우에는 반복문을 이용해서 볼 수 있다.
import java.util.StringTokenizer;

public class tistory {
    public static void main(String[] args){
        String s = "Love what you have, Seize the day";

//        1. 띄어스기를 기준으로 문자열 분리 할 때
        StringTokenizer st = new StringTokenizer(s);
        while(st.hasMoreTokens()){
            System.out.println(st.nextToken());
        }
//		  1.결과
            Love
            what
            you
            have,
            Seize
            the
            day

//        2. 구분자를 기준으로 문자열을 분리 할 때
        StringTokenizer st2 = new StringTokenizer(s, ",");
        while(st2.hasMoreTokens()){
            System.out.println(st2.nextToken());
        }
          2. 결과
          Love what you have
 			Seize the day
        
//        3. 구분자도 토큰으로 넣을 때 / 디폴트는 false
        StringTokenizer st3 = new StringTokenizer(s, ",", true);
        while(st3.hasMoreTokens()){
            System.out.println(st3.nextToken());
        }
          3. 결과
          Love what you have
            ,
             Seize the day
        
//        4. 구분자도 토큰으로 안 넣을 때 / 디폴트는 false
        StringTokenizer st4 = new StringTokenizer(s, ",", false);
        while(st4.hasMoreTokens()){
            System.out.println(st4.nextToken());
        }
          4. 결과
            Love what you have
             Seize the day          
    }
}

 

1-1. split과의 차이점

  • split은 java.util 이 아닌 String에 속해있는 메소드다.
  • split은 정규표현식으로 구분한다.
  • split은 빈 문자열을 토큰으로 인식한다.
  • split은 결과값이 문자열 배열이고 StringTokenizer는 문자열이다.

 

참고한 사이트

https://dev-coco.tistory.com/94

 

[Java] StringTokenizer 문자열 분리하기 (split과 차이는 뭘까?)

StringTokenizer 클래스란? StringTokenizer 클래스는 문자열을 구분자를 이용하여 분리할 때 사용할 수 있습니다. 만일 BufferedReader 클래스의 메서드로 입력을 읽어들인다면 라인 단위로 읽어들일 수 밖

dev-coco.tistory.com

https://jhnyang.tistory.com/entry/JAVA-StringTokenizer-%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A1%9C-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0-split-%EB%B9%84%EA%B5%90

 

[JAVA 자바] StringTokenizer 클래스로 문자열 분리하기! split 비교.

안녕하세요 양햄찌 블로그 주인장입니다. 저번시간에는 split 함수를 이용해서 문자열을 나누는 방식을 알아봤는데요. 혹시 해당 포스팅이 궁금하신 분은 아래 링크를 참고해주세요 ▼ 자바 SPLIT

jhnyang.tistory.com

 

 

 

2. Queue & Deque

https://blog.kakaocdn.net/dn/dbvNBr/btqXQ5kl0bd/35uw0uQiwk6VTgOOQzxKlK/img.png

  • Queue는 FIFO구조를  가진 자료구조 이다. → First In First Out → 가장 먼저 들어간 값이 가장 먼저 나온다.
  • import java.util.Queue, import java.util.Deque로 사용할 수 있다.
  • Queue는 항상 첫 번째 데이터를 삭제하기 때문에 데이터의 추가 삭제가 쉬운 LinkedList로 구현하는게 적합하다.
  • Deque는 Queue의 변형으로 생겼났으며 그림처럼 양쪽끝에서 원소의 추가와 삭제, 확인이 가 가능하다.
    • 양쪽 끝의 원소 삽입
      • addFirst(), addLast() → 용량이 초과 하면 예외 발생
      • offerFirst(), offerLast() → 용량 제한에 걸리는 경우 false 반환
    • 양쪽 끝의 원소 삭제
      • removeFirst(), removeLast() → Deque가 비어 있는 경우는 예외 발생
      • pollFirst(), pollLast() → Deque가 비어 있는 경우는 null 리턴
    • 양쪽 끝의 원소 확인
      • getFirst(), getLast() → Deque가 비어 있는 경우는 예외 발생
      • peekFirst(), peekLast() → Deque가 비어 있는 경우는 null 리턴
  • Deque는 ArrayDeque와 LinkedList등으로 구현 할 수 있다.

Deque로 문제를 풀면서 썼던 코드의 일부분이다.

import java.util.Deque;
import java.util.LinkedList;


public class Main {
    public static void main(String[] args) throws IOException {
        
        Deque<Integer> queue = new LinkedList<>();
        
        if(s.equals("push")){
            queue.add(Integer.parseInt(st.nextToken()));
        }
        
        if(s.equals("pop")){
            if(queue.isEmpty()){
                sb.append(-1 + "\n");
            }
            else{
                sb.append(queue.poll() + "\n");
            }
        }
        
        if(s.equals("size")){
            sb.append(queue.size() + "\n");
        }
        
        if(s.equals("empty")){
            if(queue.isEmpty()){
                sb.append(1 + "\n");
            }
            else {
                sb.append(0 + "\n");
            }
        }
        
        if(s.equals("front")){
            if(queue.isEmpty()){
                sb.append(-1 + "\n");
            }
            else{
                sb.append(queue.peekFirst() + "\n");
            }
        }
        
        if(s.equals("back")){
            if(queue.isEmpty()){
                sb.append(-1 + "\n");
            }
            else{
                sb.append(queue.peekLast() + "\n");
            }
        }
    }

 

참고한 사이트

https://cocoon1787.tistory.com/795

 

[JAVA] Deque(덱) 사용법

🚀 덱(Deque)은 Double Ended Queue의 줄임말로 큐의 양쪽에서 삽입과 삭제를 수행할 수 있는 자료구조입니다. ⭐️ Deque 선언 Deque deque = new LinkedList(); Integer형 선언 ⭐️ Deque에 값 삽입 add() addFirst() addL

cocoon1787.tistory.com

 

https://staticclass.tistory.com/100

 

05. [자바] Stack, Queue 그리고 Deque - 자료구조

다른 컬렉션이나 자료구조에 대해 더 알아보고 싶다면 아래의 링크로 들어오시라🤗 01. [자바] 컬렉션 프레임워크(Collections Framework) 컬렉션 프레임워크란? 다수의 데이터를 다루는 데 필요한 배

staticclass.tistory.com

 

 

3. Stack

https://1.bp.blogspot.com/-adpu_bJiDjs/VYxLsGSfz_I/AAAAAAAACB0/JQFKZ64XZnQ/s1600/Stack_Concept.png

  • Stack은 LIFO인 자료구조이다. → Last In First Out → 마지막에 들어간 값이 먼저 나온다.
  • import java.util.Stack으로 사용할 수 있다.
  • 단방향 입출력 구조를 가지고 있다.
  • 순차적으로 값을 추가하고 삭제한다. → 배열 기반인 ArrayList와 같은 컬렉션 클래스가 적합하다.
  • 스택의 메소드
    • empty() → Stack이 비어 있는지 알려준다. → 비어 있으면 true, 그렇지 않으면 false를 반환한다.
    • peek() → 마지막으로 들어온 값을 반환만 한다. → Stack의 변동은 없다. → 값이 없는 상태면 예외 발생
    • pop() → 마지막으로 들어온 값을 반환하고 삭제한다.
    • push() → 값을 집어 넣는다.
    • add() → 값을 집어 넣는다.
    • clear() → Stack의 모든 값을 반환하지 않고 삭제한다.

문제 풀면서 썼던 코드의 일부분이다.

import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException {
        
        Stack<Integer> stack = new Stack<>();

        int N = Integer.parseInt(br.readLine());

        if(s.equals("push")){
            stack.push(Integer.parseInt(st.nextToken()));
        }

        if(s.equals("pop")){
            if(stack.isEmpty()){
                sb.append(-1 + "\n");
            }
            else{
                sb.append(stack.pop() + "\n");
            }
        }
        if(s.equals("size")){
            sb.append(stack.size() + "\n");
        }
        if(s.equals("empty")){
            if(stack.isEmpty()){
                sb.append(1 + "\n");
            }
            else {
                sb.append(0 + "\n");
            }
        }
        if(s.equals("top")){
            if(stack.isEmpty()){
                sb.append(-1 + "\n");
            }
            else{
                sb.append(stack.peek() + "\n");
            }
        }

 

참고한 사이트

https://ittrue.tistory.com/200

 

[Java] 자바 스택(Stack) 클래스 메서드 정리 및 활용

스택이란? 스택은 ‘쌓다.’, ‘쌓이다.’와 같은 뜻을 가진 용어로, 접시를 높이 쌓아 놓은 형태와 비슷한 자료구조이다. 즉, 데이터를 순서대로 쌓는 자료구조이다. 실생활에서 흔히 접할 수

ittrue.tistory.com

https://staticclass.tistory.com/100

 

05. [자바] Stack, Queue 그리고 Deque - 자료구조

다른 컬렉션이나 자료구조에 대해 더 알아보고 싶다면 아래의 링크로 들어오시라🤗 01. [자바] 컬렉션 프레임워크(Collections Framework) 컬렉션 프레임워크란? 다수의 데이터를 다루는 데 필요한 배

staticclass.tistory.com

https://mollangpiu.tistory.com/261

 

[Java] 자바 Stack 클래스 사용 방법

자바 Stack 클래스 사용 방법 Stack의 소개 시험이나 책에서 단골 소재로 소개되는 Stack은 FILO(First In Last Out)로 외우면 끝이다. 먼저 들어온 상자가 제일 나중에 나가듯이 먼저 들어온 데이터가 가장

mollangpiu.tistory.com