package com.self;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class BufferedReaderTest {

        public static void main(String[] args) throws NumberFormatException, IOException {
                
                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                                          //BufferedReader 한줄씩 입력 받음
                StringTokenizer st =null; //값을 한글자씩 분리시키기 위해 사용한다
                
                //String s = br.readLine();
                int n = Integer.parseInt(br.readLine()); //입력 받는 동시에 int 형으로 변화
                
                int[] arrays = new int[n+1];
                st=new StringTokenizer(br.readLine()); //한글자씩 분리해서 저장
                
                
                 for (int i = 1; i <= n; i++) {
         arrays[i] = Integer.parseInt(st.nextToken());
         }
                
                for (int i = 1; i < arrays.length; i++) {
                        System.out.print(arrays[i]+" ");
                }
        }

}


StringTokenizer

보통
1 2 3 4 5 6 7 8 9

이런식으로 값이 들어오기 때문에  StringTokenizer 으로 한글자씩 분리해서 배열에 넣고 사용한다


'알고리즘' 카테고리의 다른 글

Queue -java  (0) 2019.01.23
후위 표현식 계산하기  (0) 2019.01.22
후위 표현식 만들기 (stack) - java  (0) 2019.01.22

#Queue

큐의 선입선출 구조
스택과 마찬가지로 삽입과 삭제의 위치가 제한적인 자료구조
-큐의 뒤에서는 삽입만 하고, 큐의 앞에서는 삭제만 이루어지는 구조
삽입 : enQueue
삭제 : deQueue

front = rear 상태가 같으면 공백
둘다 -1 이면 처음 구조
front = 가장 첫번째 데이터의 한칸전
rear = 마지막 데이터의 위치


기본 개념과 구조는 이렇게 있다.




public class Queue {
        
        public static int Queue[] = new int[10];
        public static int front = -1;
        public static int rear = -1;
        
        public static void main(String[] args) {
                
                enQueue(1);
                enQueue(2);
                enQueue(3);
                enQueue(4);
                enQueue(5);
                enQueue(6);
                
                System.out.println(deQueue());
                System.out.println(deQueue());
                System.out.println(deQueue());
                
        }
        
        public static boolean isEmpty() {
                return front == rear; //rear와 front 가 같으면 비어있는 상태이다
        }
        
        public static boolean isFull() {
                return rear == Queue.length-1; // Queue 전체 크기보다 -1 작으면 가득찬 상태이다
        }
        
        public static void enQueue(int i) {
                if(isFull()) { //가득 찼는지 우선 확인해야하고
                        System.out.println("에러");
                }else {
                        Queue[++rear] = i; //안찼으면 enqueue 할 수 있다.
                }
        }
        
        public static int Qpeek() {
                return Queue[front+1]; //삭제 하는건 아니고 그냥 값만 가지고 오는 경우
                
        }

        public static int deQueue() {
                if(isEmpty()) {
                        System.out.println("에러");
                }
                return Queue[++front]; //가지고 오고 front를 늘려서 삭제 하는 경우
        }
        
}


'알고리즘' 카테고리의 다른 글

BufferedReader 로 입출력 속도 단축하기  (0) 2019.01.23
후위 표현식 계산하기  (0) 2019.01.22
후위 표현식 만들기 (stack) - java  (0) 2019.01.22

후위 표현식 계산하기 

후위 표현식으로 만들고, 그 후위 표현식을 계산할려면 


기본 개념은 이렇다.

stack 구조를 하나 만들고 

후위 표현식으로 바꾼 문자열을 순서대로 읽었을때 들어가는 글자 하나 하나가 만약 숫자면 스택에 두고 연산자 이면 스택에 쌓은 숫자를 2개 꺼내서 계산하고 다시 스택에 저장하는 방식으로 계산한다.


이때 중요한점은 먼저 꺼내는 값이 num2 즉 저기 연산에서 2-8// 8에 들어 가야한다 그리고 다음에 꺼내는 값이  num1에 들어가고 계산해서 다시 스택에 쌓아주면 된다.


package com.ssafy.algo5;
/**
* 후위 표기식을 계산해서 출력하기
*
* input:
* 6 5 2 8 - * 2 / +
*
* output:
* -9
*
*/
import java.util.Scanner;

public class Z18_Cal3 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] str = sc.nextLine().split(" ");
        int[] stack = new int[str.length];
        int top =-1;
        
        for(int i = 0; i<str.length; i++) {
            char c = str[i].charAt(0);
            int num1, num2;
            
            switch (c) {
            case '+':
                num2 = stack[top--];
                num1 = stack[top--];
                stack[++top]=num1 + num2;
                break;
            
            case '-':
                num2 = stack[top--];
                num1 = stack[top--];
                stack[++top]=num1 - num2;
                break;

            case '*':
                num2 = stack[top--];
                num1 = stack[top--];
                stack[++top]=num1 * num2;
                break;  
            
            case '/':
                num2 = stack[top--];
                num1 = stack[top--];
                stack[++top]=num1 / num2;
                break;  
            
            default:
                stack[++top] =Integer.parseInt(str[i]);
                break;
            }
        }
        System.out.println(stack[top--]);
    }
}





'알고리즘' 카테고리의 다른 글

BufferedReader 로 입출력 속도 단축하기  (0) 2019.01.23
Queue -java  (0) 2019.01.23
후위 표현식 만들기 (stack) - java  (0) 2019.01.22

+ Recent posts