일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 제네릭 와일드 카드
- 함수형 인터페이스
- 접근지시자
- Study Halle
- 프리미티브 타입
- 정렬
- 람다식
- throwable
- github api
- 제네릭 타입
- 자바스터디
- System.err
- 자바할래
- docker
- raw 타입
- 합병 정렬
- 상속
- junit 5
- 바운디드 타입
- yield
- auto.create.topics.enable
- annotation processor
- 익명 클래스
- 로컬 클래스
- System.in
- 스파르타코딩클럽
- Switch Expressions
- 브릿지 메소드
- 항해99
- System.out
Archives
- Today
- Total
코딩하는 털보
11 to 9, Day 21 본문
Today, ToDoList
- 백준 코드 퀴즈
- 스택 자료구조
백준 코드 퀴즈
fast A+B
import java.io.*;
class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
int t = Integer.parseInt(reader.readLine());
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out))){
for ( int i = 0; i < t; i++ ) {
String[] nums = reader.readLine().split(" ");
int a = Integer.parseInt(nums[0]);
int b = Integer.parseInt(nums[1]);
writer.write(String.valueOf(a+b));
writer.newLine();
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
스택 자료구조
- FILO / LIFO
- push(), pop(), peek(), top() 모두 시간복잡도 O(1)
package stack;
import java.util.Stack;
public class MyStack {
Stack<Integer> stack = new Stack<>();
//스택 뒤집기 - 순회
//또 다른 자료구조 사용 필요
//시간 복잡도 O(N), 공간 복잡도 O(N)
public void reverse1() {
int length = stack.size();
Stack<Integer> newStack = new Stack<>();
while (!stack.empty()) {
newStack.push(stack.pop());
}
stack = newStack;
}
//스택 뒤집기 - 재귀
//또 다른 자료구조 사용하지 않고도 가능
//시간 복잡도 O(N^2), 공간 복잡도 O(N)
public void reverse2() {
if (stack.isEmpty()) {
} else {
int temp = stack.pop();
reverse2();
reverseRecursive(stack, temp);
}
}
private void reverseRecursive(Stack<Integer> stack, Integer num) {
if (stack.isEmpty()) {
stack.push(num);
} else {
int temp = stack.pop();
reverseRecursive(stack, num);
stack.push(temp);
}
}
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.stack.push(1);
myStack.stack.push(2);
myStack.stack.push(3);
//myStack.reverse1();
myStack.reverse2();
System.out.println(myStack.stack.pop());
System.out.println(myStack.stack.pop());
System.out.println(myStack.stack.pop());
System.out.println(myStack.stack.isEmpty());
}
}
package stack;
import java.util.Arrays;
import java.util.List;
import java.util.Stack;
public class BracketCount {
//주어진 수식의 괄호짝이 맞는지 체크
//시간복잡도 O(N) , 공간복잡도 O(N)
public boolean solution1(String expression) {
List<Character> open = Arrays.asList('(','{','[');
List<Character> close = Arrays.asList(')','}',']');
Stack<Character> stack = new Stack<>();
char[] chars = expression.toCharArray();
for (int i = 0; i < chars.length; i++) {
if ( open.contains(chars[i]) ) {
stack.push(close.get(open.indexOf(chars[i])));
} else if ( close.contains(chars[i]) ) {
if ( stack.isEmpty() || stack.pop() != chars[i] ) {
return false;
}
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
BracketCount bracketCount = new BracketCount();
System.out.println(bracketCount.solution1("[{(1+2)-1}+10]"));
System.out.println(bracketCount.solution1("[[{(1+2)-1}+10]"));
System.out.println(bracketCount.solution1("[{(1+2)-1)+10]"));
}
}
Comments