diff --git a/week1/sumin/Backjoon_1000.java b/week1/sumin/Backjoon_1000.java new file mode 100644 index 0000000..2351e08 --- /dev/null +++ b/week1/sumin/Backjoon_1000.java @@ -0,0 +1,19 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Backjoon_1000 { + public static void main(String[] args) throws IOException { + + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + String str = br.readLine(); + StringTokenizer st = new StringTokenizer(str," "); + int a = Integer.parseInt(st.nextToken()); + int b = Integer.parseInt(st.nextToken()); + + System.out.println(a+b); + } + +} diff --git a/week1/sumin/Backjoon_1001.java b/week1/sumin/Backjoon_1001.java new file mode 100644 index 0000000..2270926 --- /dev/null +++ b/week1/sumin/Backjoon_1001.java @@ -0,0 +1,16 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +class BackJoon_1001{ + public static void main(String[]args) throws IOException{ + BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); + String str=br.readLine(); + StringTokenizer st=new StringTokenizer(str," "); + int A=Integer.parseInt(st.nextToken()); + int B=Integer.parseInt(st.nextToken()); + + System.out.println(A-B); + } +} \ No newline at end of file diff --git a/week1/sumin/Backjoon_1008.java b/week1/sumin/Backjoon_1008.java new file mode 100644 index 0000000..51b1d2f --- /dev/null +++ b/week1/sumin/Backjoon_1008.java @@ -0,0 +1,16 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.StringTokenizer; + +public class Backjoon_1008 { + public static void main(String[]args)throws IOException{ + BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); + String str=br.readLine(); + StringTokenizer st=new StringTokenizer(str," "); + int A=(int) Double.parseDouble(st.nextToken()); + int B=(int) Double.parseDouble(st.nextToken()); + + System.out.println(A/B); + } +} diff --git a/week1/sumin/Backjoon_10171.java b/week1/sumin/Backjoon_10171.java new file mode 100644 index 0000000..6d32706 --- /dev/null +++ b/week1/sumin/Backjoon_10171.java @@ -0,0 +1,23 @@ +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; + +public class Backjoon_10171{ + public static void main(String[] args) throws IOException { + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + bw.write("\\ /\\"); + bw.newLine(); // 줄 구분자 + + bw.write(" ) ( ')"); + bw.newLine(); + + bw.write("( / )"); + bw.newLine(); + + bw.write(" \\(__)|"); + + bw.flush(); + bw.close(); + } +} \ No newline at end of file diff --git a/week1/sumin/Backjoon_10172.java b/week1/sumin/Backjoon_10172.java new file mode 100644 index 0000000..fd7b3da --- /dev/null +++ b/week1/sumin/Backjoon_10172.java @@ -0,0 +1,20 @@ +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; + +public class Backjoon_10172 { + public static void main(String[] args)throws IOException{ + + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + bw.write("|\\_/|\n"); + bw.write("|q p| /}\n"); + bw.write("( 0 )\"\"\"\\\n"); + bw.write("|\"^\"` |\n"); + bw.write("||_/=\\\\__|\n"); + + bw.flush(); + bw.close(); + } + +} diff --git a/week1/sumin/Backjoon_10430.java b/week1/sumin/Backjoon_10430.java new file mode 100644 index 0000000..3fe0aca --- /dev/null +++ b/week1/sumin/Backjoon_10430.java @@ -0,0 +1,26 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +class Backjoon_10430{ + public static void main(String[]args)throws IOException{ + BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); + StringTokenizer st=new StringTokenizer(bf.readLine()," "); + + int a=Integer.parseInt(st.nextToken()); + int b=Integer.parseInt(st.nextToken()); + int c=Integer.parseInt(st.nextToken()); + + bw.write((a+b)%c+"\n"); + bw.write(((a%c)+(b%c))%c+"\n"); + bw.write((a*b)%c+"\n"); + bw.write(((a%c)*(b%c))%c+"\n"); + + bw.flush(); + bw.close(); + } +} \ No newline at end of file diff --git a/week1/sumin/Backjoon_10869.java b/week1/sumin/Backjoon_10869.java new file mode 100644 index 0000000..2b9a802 --- /dev/null +++ b/week1/sumin/Backjoon_10869.java @@ -0,0 +1,28 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +public class Backjoon_10869 { + public static void main(String[] args) throws IOException { + BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out)); + String input=br.readLine(); + + StringTokenizer st= new StringTokenizer(input," "); + int a= Integer.parseInt(st.nextToken()); + int b=Integer.parseInt(st.nextToken()); + + bw.write(Integer.toString(a-b)); + bw.write(Integer.toString(a-b)); + bw.write(Integer.toString(a*b)); + bw.write(Integer.toString(a/b)); + bw.write(Integer.toString(a%b)); + + bw.flush(); + bw.close(); + } + +} diff --git a/week1/sumin/Backjoon_10926.java b/week1/sumin/Backjoon_10926.java new file mode 100644 index 0000000..96d77b4 --- /dev/null +++ b/week1/sumin/Backjoon_10926.java @@ -0,0 +1,21 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; + +public class Backjoon_10926 { + public static void main(String[] args) throws IOException{ + BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); + String year=br.readLine(); + + bw.write(year); + bw.write("??!"); + + bw.flush(); + bw.close(); + + } + +} diff --git a/week1/sumin/Backjoon_2557.java b/week1/sumin/Backjoon_2557.java new file mode 100644 index 0000000..6e98721 --- /dev/null +++ b/week1/sumin/Backjoon_2557.java @@ -0,0 +1,13 @@ +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.OutputStreamWriter; + +public class Backjoon_2557 { + public static void main(String[] args) throws IOException{ + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); + bw.write("Hello World!"); + + bw.flush(); + bw.close(); + } +} diff --git a/week1/sumin/Backjoon_3033.java b/week1/sumin/Backjoon_3033.java new file mode 100644 index 0000000..53528b5 --- /dev/null +++ b/week1/sumin/Backjoon_3033.java @@ -0,0 +1,31 @@ +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.StringTokenizer; + +class BackJoon_3033{ + public static void main(String[] args) throws IOException{ + BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); + String input=br.readLine(); + StringTokenizer st=new StringTokenizer(input," "); + BufferedWriter bw= new BufferedWriter(new OutputStreamWriter(System.out)); + int king = Integer.parseInt(st.nextToken()); + int queen=Integer.parseInt(st.nextToken()); + int rook=Integer.parseInt(st.nextToken()); + int bishop=Integer.parseInt(st.nextToken()); + int knight=Integer.parseInt(st.nextToken()); + int pawn=Integer.parseInt(st.nextToken()); + + bw.write(Integer.toString(1-king)+" "); + bw.write(Integer.toString(1-queen)+" "); + bw.write(Integer.toString(2-rook)+" "); + bw.write(Integer.toString(2-bishop)+" "); + bw.write(Integer.toString(2-knight)+" "); + bw.write(Integer.toString(8-pawn)+" "); + + bw.flush(); + bw.close(); + } +} \ No newline at end of file diff --git "a/week1/sumin/Stream(\354\212\244\355\212\270\353\246\274).md" "b/week1/sumin/Stream(\354\212\244\355\212\270\353\246\274).md" new file mode 100644 index 0000000..deb800b --- /dev/null +++ "b/week1/sumin/Stream(\354\212\244\355\212\270\353\246\274).md" @@ -0,0 +1,93 @@ +# 스트림(Stream) + +### 스트림이란? +--- + +스트림은 데이터의 이동 흐름이다. + +즉, A수도관에서 B수도관으로 이동하는 물의 흐름이라고 할 수 있다. + +프로그래밍에서는 다음과 같은 것들을 스트림이라고 한다. + +- HTTP 응답 데이터(브라우저가 요청하고 서버가 응답하는 HTTP 응답 데이터) + +스크린샷 2023-01-07 오후 12 39 02 + + +용도에 따라 입력 스트림(InputStream), 출력 스트림(OutputStream)으로 나뉜다. + +```java +BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); +``` + +### InpuStream +--- + +바이트 단위로 데이터를 처리한다. + +```java +import java.io.IOException; +import java.io.InputStream; + +public class StreamTest { + public static void main(String[] args) throws IOException { + InputStream in=System.in; + + int a; + a=in.read(); + + System.out.println(a); + + } +} +``` + +read()메서드는 1Byte의 int 자료형으로 값을 받는다. + +이 int값은 아스키코드 값이기 때문에 숫자를 입력해도 아스키 코드 값으로 출력된다. + +```java +1 //입력값 +49 //출력값 +``` + +또한, System.in의 타입도 InputStream이다. +스크린샷 2023-01-07 오후 12 12 47 + +이 방법만으로는 문자를 받기 힘드니 InputStreamReader를 사용해서 바이트 단위 데이터를 문자 단위로 처리할 수 있게하였다. + +### InputStreamReader +--- + +문자(Character) 단위로 데이터를 처리한다. + +InputStream의 데이터를 문자로 변환하는 중개 역할을 한다. + +```java +InputStreamReader reader = new InputStreamReader(new InputStream); +``` + +InputStreamReader은 InputStream 객체를 입력으로 가지고 있어야 한다. +스크린샷 2023-01-07 오후 12 17 28 + +### BufferedReader +--- +버퍼를 두어 문자를 버퍼에 일정 정도 저장해둔 뒤 한 번에 보낸다. + +```java +BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); +``` + +```java +InputStream inputstream = System.in; +InputStreamReader sr = new InputStreamReader(inputstream); +BufferedReader br = new BufferedReader(sr); +``` + +1. **바이트 단위**로 데이터를 처리하는 InputStream를 통해서 데이터를 입력받는다., +2. 바이트 단위 데이터를 **문자(Character) 단위**로 처리하기 위해서 InputStreamReader로 감싸준다. +3. 버퍼(Buffer)를 이용해 입력받은 문자를 쌓아둔 뒤 한 번에 **문자열(String)**로 보낸다. + +[System.in](http://System.in) == InputStream → InputStreamReader → BufferedReader + +바이트 단위 → Char 단위 → String 단위 \ No newline at end of file diff --git "a/week1/sumin/\353\262\204\355\215\274\353\245\274 \354\235\264\354\232\251\355\225\234 \354\236\205\354\266\234\353\240\245.md" "b/week1/sumin/\353\262\204\355\215\274\353\245\274 \354\235\264\354\232\251\355\225\234 \354\236\205\354\266\234\353\240\245.md" new file mode 100644 index 0000000..be45007 --- /dev/null +++ "b/week1/sumin/\353\262\204\355\215\274\353\245\274 \354\235\264\354\232\251\355\225\234 \354\236\205\354\266\234\353\240\245.md" @@ -0,0 +1,112 @@ +# BufferedReader / BufferedWriter + +### 버퍼 + +--- + +- 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 임시 메모리 영역 +- 입출력 속도 향상을 위해 버퍼 사용 + +**버퍼 플러쉬(buffer flush)** + +버퍼에 남아있는 데이터를 출력시킴(버퍼를 비우는 동작) +스크린샷 2023-01-07 오후 12 32 47 + +버퍼를 거쳐가는 데 왜 빠르냐고? + +하드디스크나 외부 장치와의 데이터 입출력은 시간이 오래 걸린다. + +따라서 중간에 메모리 버퍼를 두고 한꺼번에 묶어서 이동시키는 것이 효율적이고 빠르다. + +### BufferdReader, BufferedWriter + +--- + +- 버퍼를 이용해 읽고 쓰는 함수 +- 버퍼를 이용하기 때문에 입출력의 효율이 좋아진다. + +BufferedReader : 버퍼를 이용한 입력 (→ Scanner와 유사) + +BufferedWriter : 버퍼를 이용한 출력 (→ System.out.println과 유사) + +위 두개를 사용하기 위해서 다음의 추가 import가 필요하다. + +```java +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +``` + +### Scanner과 비교 + +--- + +* BufferedReader은 Enter만 경계로 인식하고 받은 데이터를 String으로 고정한다. + +Scanner에 비해 성능이 좋은 이유? +* 버퍼가 있는 스트림이다. +* 정규식을 검사하지 않는다. +즉, 하나하나 문자를 보내는 것이 아니라 한 번에 모아둔 다음에 보내니 속도가 빠르고 별다른 정규식을 검사하지 않고 문자열 그대로 받아들이기 때문에 속도가 빠르다. + + +### BufferdReader사용법 + +--- + +```java +BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언 +String s = bf.readLine(); //String +int i = Integer.parseInt(bf.readLine()); //Int +``` + +1. 입력은 readLine()을 사용하여 한 줄을 입력받는다. + + 하지만, 무조건 return 값이 String이기 떄문에 + + 다른 타입으로 입력을 받으려면 변환을 해주어야 한다. + +2. throws IOException을 이용해서 예외처리를 해주어야 한다. + +#### 메서드 정리 +* readLine() : 한 줄의 문자열을 읽음(String) +* skip(n) : n개의 문자를 스킵하고 넘어간다(Long) + +### 타입 변환하기 + +--- + +```java +StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 넣음 +int a = Integer.parseInt(st.nextToken()); //첫번째 호출 +int b = Integer.parseInt(st.nextToken()); //두번째 호출 + +String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음 +``` + +BufferedReader을 이용하면 Line 단위로만 나눠지기에 공백 단위로 구분하려면 따로 작업을 해주어야 한다. + +1. StringTokenizer에 nextToken()을 쓰면 입력받은 값을 공백단위로 구분할 수 있다. +2. String.split()함수를 이요하여 배열에 공백단위로 끊어서 데이터를 넣고 사용한다. + +### BufferedWriter사용법 + +--- + +```java +BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //할당된 버퍼에 값 넣어주기 +String s = "abcdefg"; //출력할 문자열 +bw.write(s+"\n"); //버퍼에 있는 값 전부 출력 +bw.flush(); //남아있는 데이터를 모두 출력시킴 +bw.close(); //스트림을 닫음 +``` + +1. flush(), close()를 호출해야한다. +2. bw.write()에는 개행기능이 없기에 자동으로 개행을 해주어야 한다. + + +#### 메서드 정리 +* write(s) : 문자, 문자열을 출력한다. +* newLine() : 빈 줄을 작성한다. +* flush() : 버퍼에 있는 모든 값을 출력시킨다. +* close() : 스트림을 종료한다. diff --git a/week2/sumin/Backjoon_10773.java b/week2/sumin/Backjoon_10773.java new file mode 100644 index 0000000..c47e942 --- /dev/null +++ b/week2/sumin/Backjoon_10773.java @@ -0,0 +1,45 @@ +package week2.sumin; + + +import java.io.*; +import java.util.Stack; + +public class Backjoon_10773 { + private static Stack stack = new Stack<>(); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + int K = Integer.parseInt(br.readLine()); + + for (int i = 0; i < K; i++) { + makeStack(Integer.parseInt(br.readLine())); + } + + bw.write(String.valueOf(calculateSum())); + + bw.flush(); + bw.close(); + br.close(); + } + + //입력받은 숫자를 기반으로 stack 만들기 + private static void makeStack(int num) { + if (num != 0) { + stack.push(num); + } else { + stack.pop(); + } + } + + //stack의 값 계산하기 + private static int calculateSum() { + int sum = 0; + int stackSize=stack.size(); + for (int i = 0; i < stackSize; i++) { + sum+=stack.pop(); + } + return sum; + } +} diff --git a/week2/sumin/Backjoon_10828.java b/week2/sumin/Backjoon_10828.java new file mode 100644 index 0000000..ee7e023 --- /dev/null +++ b/week2/sumin/Backjoon_10828.java @@ -0,0 +1,67 @@ +package week2.sumin + +import java.io.*; +import java.util.Stack; + +public class Backjoon_10828 { + private static Stack integerStack = new Stack<>(); + private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int N = Integer.parseInt(br.readLine()); + + for (int i = 0; i < N; i++) { + String[] input = br.readLine().split(" "); + calculateStack(input); + } + + bw.flush(); + bw.close(); + br.close(); + } + + private static void calculateStack(String[] input) throws IOException { + String command = input[0]; + + if (command.equals("push")) { + integerStack.push(Integer.parseInt(input[1])); + } + + if (command.equals("top")) { + if (integerStack.size() != 0) { + bw.write(String.valueOf(integerStack.peek())); + bw.write("\n"); + } else { + bw.write(String.valueOf(-1)); + bw.write("\n"); + } + } + + if (command.equals("size")) { + bw.write(String.valueOf(integerStack.size())); + bw.write("\n"); + } + + if (command.equals("empty")) { + if (integerStack.isEmpty()) { + bw.write(String.valueOf(1)); + bw.write("\n"); + } else { + bw.write(String.valueOf(0)); + bw.write("\n"); + } + } + + if (command.equals("pop")) { + if (integerStack.size() != 0) { + bw.write(String.valueOf(integerStack.pop())); + bw.write("\n"); + } else { + bw.write(String.valueOf(-1)); + bw.write("\n"); + } + + } + } +} diff --git a/week2/sumin/Backjoon_1406.java b/week2/sumin/Backjoon_1406.java new file mode 100644 index 0000000..c199c3f --- /dev/null +++ b/week2/sumin/Backjoon_1406.java @@ -0,0 +1,65 @@ +import java.io.*; +import java.util.Stack; + +public class Backjoon_1406 { + public static void main(String[] args) throws IOException { + //커서를 기준으로 왼쪽스택, 오른쪽 스택으로 구분함 + Stack leftStack = new Stack<>(); + Stack rightStack = new Stack<>(); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + StringBuilder sb = new StringBuilder(); + + //초기값은 다 커서보다 왼쪽에 있으니깐 leftStack에 넣기 + String[] array = br.readLine().split(""); + for (int i = 0; i < array.length; i++) { + leftStack.push(array[i]); + } + + // 입력할 명령어의 개수 + int M = Integer.parseInt(br.readLine()); + + //명령어 실행 + for (int i = 0; i < M; i++) { + String[] input = br.readLine().split(" "); + String command = input[0]; + switch (command) { + case "P": + leftStack.push(input[1]); + break; + case "D": + if(!rightStack.isEmpty()){ + leftStack.push(rightStack.pop()); + } + break; + case "L": + if(!leftStack.isEmpty()){ + rightStack.push(leftStack.pop()); + } + break; + case "B": + if(!leftStack.isEmpty()){ + leftStack.pop(); + } + break; + } + } + + //왼쪽 스택에 있는 문자열을 오른쪽 스택으로 올린다. + while (!leftStack.isEmpty()) { + rightStack.push(leftStack.pop()); + } + + //오른쪽 스택에 있는 값을 하나씩 pop해서 문자열을 만든다. + while (!rightStack.isEmpty()) { + sb.append(rightStack.pop()); + } + + bw.write(String.valueOf(sb)); + + bw.flush(); + bw.close(); + br.close(); + } + +} diff --git a/week2/sumin/Backjoon_18528.java b/week2/sumin/Backjoon_18528.java new file mode 100644 index 0000000..fca2669 --- /dev/null +++ b/week2/sumin/Backjoon_18528.java @@ -0,0 +1,51 @@ +package week2.sumin; + +import java.io.*; +import java.util.*; + +public class Backjoon_18528 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + StringBuilder sb = new StringBuilder(); + Deque deq = new LinkedList<>(); + + int num = Integer.parseInt(br.readLine()); + + for (int i = 0; i < num; i++) { + String[] command = br.readLine().split(" "); + switch (command[0]) { + case "push": + deq.add(Integer.parseInt(command[1])); + break; + case "pop": + sb.append(deq.isEmpty() ? "-1" : deq.poll()); + sb.append("\n"); + break; + case "size": + sb.append((deq.size())); + sb.append("\n"); + break; + case "empty": + sb.append(deq.isEmpty() ? 1 : 0); + sb.append("\n"); + break; + case "front": + sb.append(deq.isEmpty() ? "-1" : String.valueOf(deq.peekFirst())); + sb.append("\n"); + break; + case "back": + sb.append(deq.isEmpty() ? -1 : deq.peekLast()); + sb.append("\n"); + break; + } + + } + bw.write(String.valueOf(sb)); + bw.flush(); + + bw.close(); + br.close(); + } + +} diff --git a/week2/sumin/Backjoon_1935.java b/week2/sumin/Backjoon_1935.java new file mode 100644 index 0000000..e3a08d8 --- /dev/null +++ b/week2/sumin/Backjoon_1935.java @@ -0,0 +1,61 @@ +package week2.sumin; + +import java.io.*; +import java.util.*; + +public class Backjoon_1935 { + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + + //피연산자의 개수 + int N = Integer.parseInt(br.readLine()); + + //후위 표기식 + char[] array = br.readLine().toCharArray(); + + Stack stack = new Stack<>(); + //피연산자와 실제 숫자 관계 맺기 + Map map = new HashMap<>(); + + //피연산자는 A부터 시작하고, N개의 피연산자를 갖는다. + char key = 'A'; + for (int i = 0; i < N; i++) { + map.put(key, Double.parseDouble(br.readLine())); + key++; + } + //후위연산자의 개수만큼 반복한다. + for (int j = 0; j < array.length; j++) { + //대문자라면,그에 해당하는 값을 찾아서 스택에 넣는다. + //대문자 아스키 코드 값... 뭐지 + if (array[j] >= 'A' && array[j] <= 'Z') { + stack.push(map.get(array[j])); + } + + //연산자라면 스택에서 피연산자 2개의 값을 꺼내서 연산을 한다. + else { + double second = stack.pop(); + double first = stack.pop(); + switch (array[j]) { + case '+': + stack.push(first + second); + break; + case '-': + stack.push(first - second); + break; + case '*': + stack.push(first * second); + break; + case '/': + stack.push(first / second); + break; + } + } + } + bw.write(String.valueOf(String.format("%.2f",stack.pop()))); + + bw.flush(); + bw.close(); + br.close(); + } +} diff --git a/week2/sumin/Backjoon_9012.java b/week2/sumin/Backjoon_9012.java new file mode 100644 index 0000000..4fb390c --- /dev/null +++ b/week2/sumin/Backjoon_9012.java @@ -0,0 +1,54 @@ +package week2.sumin; + +import java.io.*; +import java.util.Stack; + +public class Backjoon_9012 { + public static void main(String[] args) throws IOException { + BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); + BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out)); + + int T=Integer.parseInt(br.readLine()); + + for(int i=0;istack=new Stack<>(); + + for(int i=0;i 중위 표기식 + +* 예제) 4 7 2 + * + 1) 왼쪽부터 순차적으로 읽으면서 연산자를 찾는다. + 2) +연산자를 기준으로 앞쪽 두 개의 피연산자(7,2)를 더한다. + 3) 연산을 진행한 후 연산된 값을 적어둔다. 4 9 * + 4) 다시 1,2,3을 진행한다. + 1) 왼쪽부터 순차적으로 읽으면서 연산자를 찾는다. + 2) *연산자를 기준으로 앞쪽 두 개의 피연산자(4,9)를 곱한다. + 3) 연산을 진행한 후 연산된 값을 적어둔다 36 + +​ + +#### 중위 표기식 -> 후위 표기식 + +* 예제) 4 * 7+2 + 1. 숫자일 때는 출력을 해준다. + 2. 연산자 일 때는 + 1. 스택에 아무것도 없으면 -> 무조건 스택에 넣는다. + 2. 스택에 다른 연산자가 있으면 -> 넣고자하는 연산자가 스택에 있는 다른 연산자보다 우선순위가 높을 때까지 스택에 있는 다른 연산자를 출력하고, 해당 연산자를 스택에 넣는다. + 3. 연산자 우선순위 주의할 점 + 1. ( : 무조건 스택에 넣는다. + 2. ) : 여는 괄호와 그 사이에 있는 연산을 처리해주고, 여는 괄호를 pop해준다. \ No newline at end of file