https://teresa88.tistory.com/44
https://teresa88.tistory.com/45
https://teresa88.tistory.com/46
https://teresa88.tistory.com/47
1. StringTokenizer
- 입력을 받았을 때 공백, 컴마 등등 구분자로 구분된 문자열을 나누고 싶을 때 사용한다.
- 문자열을 토큰화 한다.
- 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
2. Queue & Deque
- 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
https://staticclass.tistory.com/100
3. Stack
- 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
https://staticclass.tistory.com/100
https://mollangpiu.tistory.com/261
'스터디일지 > JAVA' 카테고리의 다른 글
[2023.07.29] StringTokenizer의 메소드 / Math 함수 / Greedy Algorithm (탐욕 알고리즘) (0) | 2023.07.29 |
---|---|
[2023.07.28] 요세푸스 순열 / PriorityQueue / Heap (0) | 2023.07.28 |
[2023.07.27] BufferedWriter / Character Class (0) | 2023.07.27 |
[2023.07.25] BufferReader / InputStreamReader / StringBuilder (0) | 2023.07.25 |
[자바] 1011번 Fly me to the Alpha Centauri (0) | 2023.07.25 |