

괄호(대괄호 등)가 있는 문제는 거의 Stack을 이용해서 푸는 문제다
import java.util.Scanner;
import java.util.Stack;
public class Main {
public String solution(String str) {
String answer = "YES";
Stack<Character> stack = new Stack<>();
for(char x : str.toCharArray()) {
if(x == '(') {
stack.push(x);
} else {
// 닫는 괄호가 많은 상황
if(stack.isEmpty()) {
return "NO";
}
stack.pop();
}
}
// 여는 괄호가 많은 상황
if(!stack.isEmpty()) {
return "NO";
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}

import java.util.Scanner;
import java.util.Stack;
public class Main {
public String solution(String str) {
String answer = "";
Stack<Character> stack = new Stack<>();
for(char x : str.toCharArray()) {
if(x == ')') {
while(stack.pop() != '(');
} else {
stack.push(x);
}
}
for(int i = 0; i < stack.size(); i++) {
answer += stack.get(i);
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}



import java.util.Stack;
import java.util.Scanner;
public class Main {
public int solution(int[][] board, int[] moves) {
int answer= 0;
Stack<Integer> stack = new Stack<>();
for(int pos : moves) {
for(int i = 0; i < board.length; i++) {
if(board[i][pos - 1] != 0) {
int tmp = board[i][pos - 1];
board[i][pos - 1] = 0;
if(!stack.isEmpty() && tmp == stack.peek()) {
answer += 2;
stack.pop();
} else {
stack.push(tmp);
}
break;
}
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int[][] board = new int[n][n];
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
board[i][j] = kb.nextInt();
}
}
int m = kb.nextInt();
int[] moves = new int[m];
for(int i = 0; i < m; i++) {
moves[i] = kb.nextInt();
}
System.out.print(T.solution(board, moves));
}
}

import java.util.Stack;
import java.util.Scanner;
public class Main {
public int solution(String str) {
int answer= 0;
Stack<Integer> stack = new Stack<>();
for(char x : str.toCharArray()) {
if(Character.isDigit(x)) {
stack.push(x - 48);
} else {
int rt = stack.pop();
int lt = stack.pop();
if(x == '+') {
stack.push(lt + rt);
} else if(x == '-') {
stack.push(lt - rt);
} else if(x == '*') {
stack.push(lt * rt);
} else if(x == '/') {
stack.push(lt / rt);
}
}
}
answer = stack.get(0);
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}


import java.util.Stack;
import java.util.Scanner;
public class Main {
public int solution(String str) {
int answer= 0;
Stack<Character> stack = new Stack<>();
for(int i = 0; i < str.length(); i++) {
if(str.charAt(i) == '(') {
stack.push('(');
} else {
stack.pop();
if(str.charAt(i - 1) == '(') {
answer += stack.size();
} else {
answer++;
}
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public int solution(int n, int k) {
int answer= 0;
Queue<Integer> Q = new LinkedList<>();
for(int i = 1; i <= n; i++) {
Q.offer(i);
}
while(!Q.isEmpty()) {
for(int i = 1; i < k; i++) {
Q.offer(Q.poll());
}
Q.poll();
if(Q.size() == 1) {
answer = Q.poll();
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int k = kb.nextInt();
System.out.print(T.solution(n, k));
}
}

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public String solution(String need, String plan) {
String answer = "YES";
Queue<Character> Q = new LinkedList<>();
for(char x : need.toCharArray()) {
Q.offer(x);
}
for(char x : plan.toCharArray()) {
if(Q.contains(x)) {
if(x != Q.poll()) {
return "NO";
}
}
}
if(!Q.isEmpty()) {
return "NO";
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String a = kb.next();
String b = kb.next();
System.out.println(T.solution(a, b));
}
}


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Person {
int id;
int priority;
public Person(int id, int priority) {
this.id = id;
this.priority = priority;
}
}
public class Main {
public int solution(int n, int m, int[] arr) {
int answer = 0;
Queue<Person> Q = new LinkedList<>();
for(int i = 0; i < n; i++) {
Q.offer(new Person(i, arr[i]));
}
while(!Q.isEmpty()) {
Person tmp = Q.poll();
for(Person x : Q) {
if(x.priority > tmp.priority) {
Q.offer(tmp);
tmp = null;
break;
}
}
if(tmp != null) {
answer++;
if(tmp.id == m) {
return answer;
}
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
System.out.print(T.solution(n, m, arr));
}
}