영원히 흘러가는 강
백준 알고리즘 스택 본문
728x90
10828 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.
주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.
문제에 나와있지 않은 명령이 주어지는 경우는 없다.
import java.util.Scanner;
import java.util.Stack;
public class main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=Integer.parseInt(sc.nextLine()); //입력 수
Stack<Integer> stack = new Stack<Integer>(); //스택
System.out.println(" ");
for(int i=0;i<x;i++) {
String result=sc.nextLine();
String k=result.split(" ")[0]; //result 값에 빈칸을 기준으로 잡음
if(k.equals("push")) {
stack.push(Integer.parseInt(result.split(" ")[1])); //빈칸 이후의 값
}
else if(k.equals("top")) {
System.out.println(stack.isEmpty()?-1:stack.peek());
}
else if(k.equals("pop")) {
System.out.println(stack.isEmpty()?-1:stack.pop());
}
else if(k.equals("size")) {
System.out.println(stack.size());
}
else if(k.equals("empty")) {
System.out.println(stack.isEmpty()?1:0);
}
}
}
}
개선이 필요! 시간초과..
10773번 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000)
이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경우 해당 수를 쓴다.
정수가 "0"일 경우에 지울 수 있는 수가 있음을 보장할 수 있다.
import java.util.Scanner;
import java.util.Stack;
public class main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt(); //입력 수
int sum=0;
Stack<Integer> stack = new Stack<Integer>(); //스택
for(int i=0;i<x;i++) {
int n=sc.nextInt();
if(n==0) { //0 입력시
stack.pop(); //스택의 값 pop
}
else{
stack.push(n); //0이 아닐시 stack 에 push
}
}
for(int i:stack) {
sum=sum+i;
}
System.out.println(sum);
}
}
9012 괄호 * 코테에서 나와서 봤었던 지문
( 와 ) 로 이루어져 있는 문자열. 올바른 괄호식이 되도록!
import java.util.Scanner;
import java.util.Stack;
public class main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
System.out.println("");
for(int i=0;i<x;i++) {
String str=sc.next();
String[] arr=str.split("");
int sum=0;
for(int j=0;j<arr.length;j++) {
if(arr[j].equals("(")) { // ( 나오면 수 증가
sum=sum+1;
}else if(arr[j].equals(")")) { // ) 수 감소
sum=sum-1;
}
if(sum<0) {
System.out.println("no"); //만약 -가 된다면 올바른 수식x
break;
}
}
if(sum==0)
System.out.println("yes");
else if(sum>0)
System.out.println("no");
}
}
}
휴먼 에러;;;
4949 균형잡힌 세상
위의 문제에서 더 나아가 [ ] 추가
import java.util.Scanner;
public class main2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(true) {
String str=sc.nextLine();
String[] arr=str.split("");
int sum=0;
int gsum=0;
if(arr[0]==".") {
System.out.println("yes");
break;
}
for(int j=0;j<arr.length;j++) {
if(arr[j].equals("(")) {
sum=sum+1;
}else if(arr[j].equals(")")) {
sum=sum-1;
}
if(arr[j].equals("[")) {
gsum=gsum+1;
}
else if(arr[j].equals("]")) {
gsum=gsum-1;
}
if(sum<0) {
System.out.println("no");
break;
}
if(gsum<0) {
System.out.println("no");
break;
}
}
if(sum==0 && gsum==0)
System.out.println("yes");
else if(sum==0 || gsum==0)
System.out.println("no");
}
}
}
실패...
728x90
'알고리즘' 카테고리의 다른 글
백준 알고리즘 그리디 (0) | 2020.10.19 |
---|---|
알고리즘에 자주 사용되는 (0) | 2020.10.19 |
백준 알고리즘 브루트 포스 (0) | 2020.10.08 |
백준 알고리즘 재귀 (0) | 2020.10.08 |
백준 알고리즘 (0) | 2020.10.07 |
Comments