From 2e2326fa9ccd6531d74d2943a2f80d8f30a41562 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Wed, 6 Mar 2024 20:09:39 +0900 Subject: [PATCH 01/16] docs : readme test --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8fe711203..bd0a922fe 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,4 @@ git checkout main // 기본 브랜치가 main인 경우 git checkout -b 브랜치이름 ex) git checkout -b apply-feedback ``` +test \ No newline at end of file From eceec83de8fa96993eff285d1794049a999336fe Mon Sep 17 00:00:00 2001 From: fortune-man Date: Sat, 15 Jun 2024 15:53:18 +0900 Subject: [PATCH 02/16] feat: leetcode tdd practice --- src/main/java/Queue.java | 2 ++ src/main/java/TwoStackForQueue.java | 2 ++ src/test/java/DeleteStringTest.java | 4 ++++ src/test/java/QueueTest.java | 4 ++++ src/test/java/TwoStackForQueueTest.java | 4 ++++ 5 files changed, 16 insertions(+) create mode 100644 src/main/java/Queue.java create mode 100644 src/main/java/TwoStackForQueue.java create mode 100644 src/test/java/DeleteStringTest.java create mode 100644 src/test/java/QueueTest.java create mode 100644 src/test/java/TwoStackForQueueTest.java diff --git a/src/main/java/Queue.java b/src/main/java/Queue.java new file mode 100644 index 000000000..4f24831d3 --- /dev/null +++ b/src/main/java/Queue.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class Queue { +} diff --git a/src/main/java/TwoStackForQueue.java b/src/main/java/TwoStackForQueue.java new file mode 100644 index 000000000..d548e39db --- /dev/null +++ b/src/main/java/TwoStackForQueue.java @@ -0,0 +1,2 @@ +package PACKAGE_NAME;public class twoStackForQueue { +} diff --git a/src/test/java/DeleteStringTest.java b/src/test/java/DeleteStringTest.java new file mode 100644 index 000000000..f1b3078d2 --- /dev/null +++ b/src/test/java/DeleteStringTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class DeleteStringTest { + +} \ No newline at end of file diff --git a/src/test/java/QueueTest.java b/src/test/java/QueueTest.java new file mode 100644 index 000000000..9591e3796 --- /dev/null +++ b/src/test/java/QueueTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class QueueTest { + +} \ No newline at end of file diff --git a/src/test/java/TwoStackForQueueTest.java b/src/test/java/TwoStackForQueueTest.java new file mode 100644 index 000000000..2acb17998 --- /dev/null +++ b/src/test/java/TwoStackForQueueTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class TwoStackForQueueTest { + +} \ No newline at end of file From d746bfbd5086fa5fa9a0520ecf1efec284d3b74c Mon Sep 17 00:00:00 2001 From: fortune-man Date: Sat, 15 Jun 2024 17:57:41 +0900 Subject: [PATCH 03/16] feat: practice tdd with leetcode --- src/main/java/Anagram.java | 56 +++++++++++++++++ src/main/java/DeleteString.java | 62 +++++++++++++++++++ src/main/java/Queue.java | 34 ++++++++++- src/main/java/Stack.java | 37 +++++++++++ src/main/java/TwoStackForQueue.java | 38 +++++++++++- src/test/java/AnagramTest.java | 77 +++++++++++++++++++++++ src/test/java/DeleteStringTest.java | 81 ++++++++++++++++++++++++- src/test/java/QueueTest.java | 50 ++++++++++++++- src/test/java/StackTest.java | 46 ++++++++++++++ src/test/java/TwoStackForQueueTest.java | 49 ++++++++++++++- 10 files changed, 525 insertions(+), 5 deletions(-) create mode 100644 src/main/java/Anagram.java create mode 100644 src/main/java/DeleteString.java create mode 100644 src/main/java/Stack.java create mode 100644 src/test/java/AnagramTest.java create mode 100644 src/test/java/StackTest.java diff --git a/src/main/java/Anagram.java b/src/main/java/Anagram.java new file mode 100644 index 000000000..bbeaccc53 --- /dev/null +++ b/src/main/java/Anagram.java @@ -0,0 +1,56 @@ +import java.util.*; + +public class Anagram { + List anagram = new ArrayList<>(); + List> anagramsList = new ArrayList<>(); + int count = 0; + + public List> groupAnagrams(String[] strs) { + + + // 배열의 요소들을 리스트에 저장 + for (int i = 0; i < strs.length; i++) { + String string = strs[i]; + for (int j = 0; j < string.length(); j++) { + + // 문자열 끼리 비교하여 동일한 char을 모두 포함하는지 검증 필요 + for (int k = 0; k < string.length(); k++) { + char index = string.charAt(k); + String valid = String.valueOf(index); + if (string.contains(valid)) { + count++; + } + } + } + + // 아나그램으로 분류된 문자열을 리스트에 저장 + if (count == string.length()) { + anagram.add(string); + } + // 아나그램을 아나그램 리스트에 저장 + anagramsList.add(anagram); + } + + // 아나그램 리스트를 오름차순으로 정렬하여 return + return anagramsList; + } + + // 문자열 끼리 비교하여 동일한 char을 모두 포함하는지 검증 필요 + + /** + * Input: strs = ["eat","tea","tan","ate","nat","bat"] + * Output: [["bat"],["nat","tan"],["ate","eat","tea"]] + * @param string + */ + private void compareString(String string) { + for (int i = 0; i < string.length(); i++) { + StringTokenizer token = new StringTokenizer(string); + String validAnagram = token.toString(); + + if (string.contains(validAnagram)) { + count++; + } + } + + } +} diff --git a/src/main/java/DeleteString.java b/src/main/java/DeleteString.java new file mode 100644 index 000000000..32ff6272e --- /dev/null +++ b/src/main/java/DeleteString.java @@ -0,0 +1,62 @@ +import java.util.Random; +import java.util.Scanner; + +import static java.lang.String.valueOf; + +// 기능 목록 정의 +// 문자열에 존재하는 ? 하나를 0 또는 1로 바꾼다 +// 문자열 앞의 숫자가 연속될 경우 1개 이상을 지운다 +// 문자열 뒤의 숫자가 연속될 경우 1개 이상을 지운다 +// 준범과 명섭의 차례를 반환한다 +// 패배를 정의한다 (더 이상 할 수 있는 행동이 없는 경우) + +public class DeleteString { + + public static void main(String[] args) { + + Scanner sc = new Scanner(System.in); + String S = sc.next(); + // 기능 목록 정의 + // 문자열 S를 입력받으면 연속 여부를 가장 앞의 숫자와 가장 뒤의 숫자 순서로 검사 + char[] arrayFirst = S.toCharArray(); + for (int i = 0; i < S.length(); i++) { + if(arrayFirst[i] == arrayFirst[i+1]) { + // 연속된 숫자는 1개 이상 제거 + S = S.substring(i); + } + } + char[] arrayLast = S.toCharArray(); + for (int i = S.length(); i > 0 ; i--) { + if(arrayLast[i] == arrayLast[i-1]) { + // 연속된 숫자는 1개 이상 제거 + S = S.substring(0, i); + } + } + + // 준범과 명섭의 순서로 차례를 주고 받으며 진행 + // 준범 true, 명섭 false + boolean turn = false; + + + // 더 이상 연속되는 숫자가 없는 경우 차례 정보를 저장 + // 저장된 차례 정보를 통해 준범과 명섭의 승패 결과를 return + // return 결과를 출력 + if (S.length() < 2) { + System.out.println(getWinner(turn)); + } + + sc.close(); + } + + private static int getWinner(boolean turn) { + if (turn) { + return 1; + } + return 0; + } + + + // 승부는 성장의 기회 + // 경쟁은 언제나 좋은것 + // 보자.. 먹히나 안먹히나 +} diff --git a/src/main/java/Queue.java b/src/main/java/Queue.java index 4f24831d3..10c7e077f 100644 --- a/src/main/java/Queue.java +++ b/src/main/java/Queue.java @@ -1,2 +1,34 @@ -package PACKAGE_NAME;public class Queue { +import java.util.LinkedList; + +public class Queue { + + private LinkedList queue; + + public Queue() { + this.queue = new LinkedList<>(); + }; + + // 데이터 추가 + public void enqueue(T data) { + if (data.equals(null)) { + throw new NullPointerException("정확한 입력이 필요해요!"); + } + // 큐 마지막에 데이터 추가 + queue.addLast(data); + } + + public T dequeue() { + // 널체크 + if (isValid()) { + throw new NullPointerException("정확한 입력이 필요해요!"); + } + // 가장 먼저 추가된 데이터를 제거하고 return + return queue.removeFirst(); + } + + public boolean isValid() { + return queue.isEmpty(); + } + + } diff --git a/src/main/java/Stack.java b/src/main/java/Stack.java new file mode 100644 index 000000000..43637d158 --- /dev/null +++ b/src/main/java/Stack.java @@ -0,0 +1,37 @@ +import java.util.ArrayList; +import java.util.List; + +public class Stack { + private List stack; + private int size; + + public Stack() { + this.stack = new ArrayList<>(); + this.size = stack.size(); + } + + // 요소 추가하는 stack push + public void push(T stringOrInteger) { + stack.add(stringOrInteger); + } + + // 요소 제거와 반환하는 stack pop + public T pop() { + try { + // 입력값 널 체크 + if (isValid()) { + throw new NullPointerException("비어있는 값이 입력되었습니다. \n 올바른 값을 입력해주세요"); + } + // 가장 최근에 추가된 요소 제거후 최상위값 return + return stack.remove(stack.size() - 1); + } catch (NullPointerException e) { + System.out.println(e.getMessage()); + return null; + } + } + + + private boolean isValid() { + return stack.isEmpty(); + } +} diff --git a/src/main/java/TwoStackForQueue.java b/src/main/java/TwoStackForQueue.java index d548e39db..761f6afb3 100644 --- a/src/main/java/TwoStackForQueue.java +++ b/src/main/java/TwoStackForQueue.java @@ -1,2 +1,38 @@ -package PACKAGE_NAME;public class twoStackForQueue { +import java.util.Stack; + +public class TwoStackForQueue { + + private Stack input; + private Stack output; + + public TwoStackForQueue() { + this.input = new Stack<>(); + this.output = new Stack<>(); + } + + // 인큐로 데이터를 추가한다 + public void enqueue(T data) { + // 널체크 + if (data.equals(null) || (data instanceof String + && ((String) data) + .trim() + .isEmpty())) { + throw new NullPointerException("입력이 누락되었습니다"); + } + input.push(data); + } + + public T dequeue() { + if(output.isEmpty()) { + while(!input.isEmpty()){ + output.push(input.pop()); + } + } + // output 스택에서 요소를 pop하여 반환 + return output.pop(); + } + + public boolean isEmpty() { + return input.isEmpty() && output.isEmpty(); + } } diff --git a/src/test/java/AnagramTest.java b/src/test/java/AnagramTest.java new file mode 100644 index 000000000..2d9ca3333 --- /dev/null +++ b/src/test/java/AnagramTest.java @@ -0,0 +1,77 @@ +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.*; + +//class AnagramTest { +// +// Anagram anagram = new Anagram(); +// @Test +// void replace() { +// String actual = "abc".replace("b", "d"); +// assertThat(actual).isEqualTo("adc"); +// } +// +// @Test +// void 아나그램을_아나그램_리스트에_저장() { +// +// +// +// } +// +// @Test +// void 아나그램_리스트를_오름차순으로_정렬하여_return() { +// +// } +// +// @Test +// void 아나그램으로_분류된_문자열을_리스트에_저장() { +// +// } +// +// +// @Test +// void 문자열간_비교를_통해__동일한_char을_모두_포함하는지_검증() { +// +// } +// +// @Test +// void 배열_인덱스_길이_만큼_탐색() { +// +// } +// +// @Test +// void 배열_인덱스_별_문자열_길이만큼_탐색() { +// Anagram.s +// } +// /** +// * // 배열 인덱스 길이 만큼 탐색 +// * for (int i = 0; i < strs.length; i++) { +// * // 배열 인덱스 별 문자열 길이만큼 탐색 +// * for (int j = 0; j < strs[i].length(); j++) { +// * // 문자열 끼리 비교하여 동일한 char을 모두 포함하는지 검증 필요 +// * for (char index : string) { +// * if (string.contains(index)) { +// * count++; +// * } +// * } +// * +// * // 아나그램으로 분류된 문자열을 리스트에 저장 +// * if(count==string.length()) { +// * anagram.add(string); +// * } +// * } +// * +// * // 아나그램을 아나그램 리스트에 저장 +// * List> aa = anagramsList.add(anagram); +// * +// * } +// * +// * // 아나그램 리스트를 오름차순으로 정렬하여 return +// * return Collections.sort(anagramsList); +// */ + +//} \ No newline at end of file diff --git a/src/test/java/DeleteStringTest.java b/src/test/java/DeleteStringTest.java index f1b3078d2..5152d2916 100644 --- a/src/test/java/DeleteStringTest.java +++ b/src/test/java/DeleteStringTest.java @@ -1,4 +1,83 @@ +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.Random; + +import static java.lang.String.valueOf; import static org.junit.jupiter.api.Assertions.*; + + class DeleteStringTest { - + + @Test + void 물음표가_있을_경우_0_또는_1을_반환() { + String S = "0, 1, ? "; + for(char index : S.toCharArray()) { + if (valueOf(index).equals("?")) { + Random random = new Random(); + int temp = random.nextInt(1); + } + } + + assertEquals(S, "0,1,1"); + } + // 문자열 앞의 숫자가 연속될 경우 1개 이상을 지운다 + // 성공은 실패가 주는 패배감을 진정으로 두려워하지 않을 때 시작된다 + @Test + void 문자열_앞의_숫자가_연속될_경우_1개_이상을_지운다() { + String given = "110"; + + char[] givenCharArray = given.toCharArray(); + for (int i = 0; i < givenCharArray.length; i++) { + boolean valid = givenCharArray[i] == givenCharArray[i + 1]; + if (valid) { + given.replace(givenCharArray[i], givenCharArray[i + 1]); + } + } + + + } +// 문자열 뒤의 숫자가 연속될 경우 1개 이상을 지운다 + @Test + void 문자열_뒤의_숫자가_연속될_경우_1개_이상을_지운다() { + String given = "0011110000011000000"; + + String[] givenArray = new String[given.length()]; + + + for (String index : givenArray) { + // 성공은 실패가 주는 패배감을 진정으로 두려워하지 않을 때 시작된다 + // 매달린다고 뭐가 되나 + + } + } +// 준범과 명섭의 차례를 반환한다 + @Test + void 준범과_명섭의_차례를_반환한다() { + boolean joonbeom = false; + boolean myeongsub = false; + } +// 패배를 정의한다 (더 이상 할 수 있는 행동이 없는 경우) + @ParameterizedTest + @ValueSource(strings = {"0", "1", ""}) + void 패배를_정의한다(String given) { + boolean end = false; + String givenZero = "0"; + String givenOne = "1"; + String givenNull = ""; + if (given.equals(givenZero)) { + end = true; + } + if (given.equals(givenOne)) { + end = true; + } + if (given.equals(givenNull)) { + end = true; + } + + // 승부는 성장의 기회 + + + } } \ No newline at end of file diff --git a/src/test/java/QueueTest.java b/src/test/java/QueueTest.java index 9591e3796..8dd81db20 100644 --- a/src/test/java/QueueTest.java +++ b/src/test/java/QueueTest.java @@ -1,4 +1,52 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + import static org.junit.jupiter.api.Assertions.*; + class QueueTest { - + + private Queue queue; + @BeforeEach + void setUp() { + queue = new Queue<>(); + } + + @ParameterizedTest + @ValueSource(ints = {1, 2, 3, 4, 5}) + void 큐에_요소를_추가하면_널체크가_실패후_가장_먼저_추가된_요소_제거됨(int data){ + queue.enqueue(data); + assertFalse(queue.isValid()); + assertEquals(data, queue.dequeue()); + } + + @Test + void 가장_먼저_추가된_요소가_제거된다() { + int[] given = {1, 2, 3, 4, 5}; + for (int index : given) { + queue.enqueue(index); + } + + // FIFO로 먼저 추가된 값이 제거되는지 확인 + for(int expected : given) { + assertEquals(expected, queue.dequeue()); + } + } + + + + @Test + void 널체크_유효시_익셉션() { + // given + String given = "정확한 입력이 필요해요!"; + + // when + NullPointerException exception = assertThrows(NullPointerException.class, () -> { + queue.dequeue(); + }); + + // then + assertEquals(given, exception.getMessage()); + } } \ No newline at end of file diff --git a/src/test/java/StackTest.java b/src/test/java/StackTest.java new file mode 100644 index 000000000..2fd2f28a2 --- /dev/null +++ b/src/test/java/StackTest.java @@ -0,0 +1,46 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class StackTest { + + private Stack stack; + + @BeforeEach + void setUp() { + stack = new Stack<>(); + String[] lifo = {"last", "in", "first", "out"}; + + // 스택에 요소를 추가 + for (String index : lifo) { + stack.push(index); + } + } + + @Test + void 비어있는_값_입력시_널_포인터_반환() { + // given + stack.push(""); // 입력값을 스택에 추가 + + // when + NullPointerException given = assertThrows(NullPointerException.class, () -> { + stack.pop(); + }); + + // then + assertEquals("비어있는 값이 입력되었습니다. \n 올바른 값을 입력해주세요", given.getMessage()); + } + + @Test + void 가장_최근에_추가된_데이터를_삭제한다() { + + //then + + // 정상 동작 체크 + assertEquals("out", stack.pop()); + assertEquals("first", stack.pop()); + assertEquals("in", stack.pop()); + assertEquals("last", stack.pop()); + } +} \ No newline at end of file diff --git a/src/test/java/TwoStackForQueueTest.java b/src/test/java/TwoStackForQueueTest.java index 2acb17998..34fd64de1 100644 --- a/src/test/java/TwoStackForQueueTest.java +++ b/src/test/java/TwoStackForQueueTest.java @@ -1,4 +1,51 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.*; + class TwoStackForQueueTest { - + + private TwoStackForQueue queue; + + @BeforeEach + void setUp() { + queue = new TwoStackForQueue<>(); + } + + + @Test + void 인큐가_정상이면_널체크_건너뜀() { + queue.enqueue("hello"); + assertFalse(queue.isEmpty()); + } + + @Test + void 널체크_유효시_예외_처리() { + assertThrows(NullPointerException.class, () -> { + queue.enqueue(null); + }); + + assertThrows(NullPointerException.class, () -> { + queue.enqueue(""); + }); + + assertThrows(NullPointerException.class, () -> { + queue.enqueue(" "); + }); + } + + @Test + void 큐에_가장_먼저_추가된_요소가_제거() { + String[] given = {"two", "stack", "for", "implements", "queue"}; + + for (String value : given) { + queue.enqueue(value); + } + + assertEquals("two", queue.dequeue()); + assertEquals("stack", queue.dequeue()); + assertEquals("for", queue.dequeue()); + assertEquals("implements", queue.dequeue()); + assertEquals("queue", queue.dequeue()); + } } \ No newline at end of file From 69da0777f0872813830c4ac0b63846e107570062 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Mon, 17 Jun 2024 07:45:48 +0900 Subject: [PATCH 04/16] =?UTF-8?q?test(StringTest)=20:=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Anagram.java | 56 ----------------- src/main/java/DeleteString.java | 62 ------------------ src/main/java/Queue.java | 34 ---------- src/main/java/Stack.java | 37 ----------- src/main/java/TwoStackForQueue.java | 38 ----------- src/test/java/AnagramTest.java | 77 ----------------------- src/test/java/DeleteStringTest.java | 83 ------------------------- src/test/java/QueueTest.java | 52 ---------------- src/test/java/StackTest.java | 46 -------------- src/test/java/TwoStackForQueueTest.java | 51 --------------- src/test/java/study/StringTest.java | 4 +- 11 files changed, 2 insertions(+), 538 deletions(-) delete mode 100644 src/main/java/Anagram.java delete mode 100644 src/main/java/DeleteString.java delete mode 100644 src/main/java/Queue.java delete mode 100644 src/main/java/Stack.java delete mode 100644 src/main/java/TwoStackForQueue.java delete mode 100644 src/test/java/AnagramTest.java delete mode 100644 src/test/java/DeleteStringTest.java delete mode 100644 src/test/java/QueueTest.java delete mode 100644 src/test/java/StackTest.java delete mode 100644 src/test/java/TwoStackForQueueTest.java diff --git a/src/main/java/Anagram.java b/src/main/java/Anagram.java deleted file mode 100644 index bbeaccc53..000000000 --- a/src/main/java/Anagram.java +++ /dev/null @@ -1,56 +0,0 @@ -import java.util.*; - -public class Anagram { - List anagram = new ArrayList<>(); - List> anagramsList = new ArrayList<>(); - int count = 0; - - public List> groupAnagrams(String[] strs) { - - - // 배열의 요소들을 리스트에 저장 - for (int i = 0; i < strs.length; i++) { - String string = strs[i]; - for (int j = 0; j < string.length(); j++) { - - // 문자열 끼리 비교하여 동일한 char을 모두 포함하는지 검증 필요 - for (int k = 0; k < string.length(); k++) { - char index = string.charAt(k); - String valid = String.valueOf(index); - if (string.contains(valid)) { - count++; - } - } - } - - // 아나그램으로 분류된 문자열을 리스트에 저장 - if (count == string.length()) { - anagram.add(string); - } - // 아나그램을 아나그램 리스트에 저장 - anagramsList.add(anagram); - } - - // 아나그램 리스트를 오름차순으로 정렬하여 return - return anagramsList; - } - - // 문자열 끼리 비교하여 동일한 char을 모두 포함하는지 검증 필요 - - /** - * Input: strs = ["eat","tea","tan","ate","nat","bat"] - * Output: [["bat"],["nat","tan"],["ate","eat","tea"]] - * @param string - */ - private void compareString(String string) { - for (int i = 0; i < string.length(); i++) { - StringTokenizer token = new StringTokenizer(string); - String validAnagram = token.toString(); - - if (string.contains(validAnagram)) { - count++; - } - } - - } -} diff --git a/src/main/java/DeleteString.java b/src/main/java/DeleteString.java deleted file mode 100644 index 32ff6272e..000000000 --- a/src/main/java/DeleteString.java +++ /dev/null @@ -1,62 +0,0 @@ -import java.util.Random; -import java.util.Scanner; - -import static java.lang.String.valueOf; - -// 기능 목록 정의 -// 문자열에 존재하는 ? 하나를 0 또는 1로 바꾼다 -// 문자열 앞의 숫자가 연속될 경우 1개 이상을 지운다 -// 문자열 뒤의 숫자가 연속될 경우 1개 이상을 지운다 -// 준범과 명섭의 차례를 반환한다 -// 패배를 정의한다 (더 이상 할 수 있는 행동이 없는 경우) - -public class DeleteString { - - public static void main(String[] args) { - - Scanner sc = new Scanner(System.in); - String S = sc.next(); - // 기능 목록 정의 - // 문자열 S를 입력받으면 연속 여부를 가장 앞의 숫자와 가장 뒤의 숫자 순서로 검사 - char[] arrayFirst = S.toCharArray(); - for (int i = 0; i < S.length(); i++) { - if(arrayFirst[i] == arrayFirst[i+1]) { - // 연속된 숫자는 1개 이상 제거 - S = S.substring(i); - } - } - char[] arrayLast = S.toCharArray(); - for (int i = S.length(); i > 0 ; i--) { - if(arrayLast[i] == arrayLast[i-1]) { - // 연속된 숫자는 1개 이상 제거 - S = S.substring(0, i); - } - } - - // 준범과 명섭의 순서로 차례를 주고 받으며 진행 - // 준범 true, 명섭 false - boolean turn = false; - - - // 더 이상 연속되는 숫자가 없는 경우 차례 정보를 저장 - // 저장된 차례 정보를 통해 준범과 명섭의 승패 결과를 return - // return 결과를 출력 - if (S.length() < 2) { - System.out.println(getWinner(turn)); - } - - sc.close(); - } - - private static int getWinner(boolean turn) { - if (turn) { - return 1; - } - return 0; - } - - - // 승부는 성장의 기회 - // 경쟁은 언제나 좋은것 - // 보자.. 먹히나 안먹히나 -} diff --git a/src/main/java/Queue.java b/src/main/java/Queue.java deleted file mode 100644 index 10c7e077f..000000000 --- a/src/main/java/Queue.java +++ /dev/null @@ -1,34 +0,0 @@ -import java.util.LinkedList; - -public class Queue { - - private LinkedList queue; - - public Queue() { - this.queue = new LinkedList<>(); - }; - - // 데이터 추가 - public void enqueue(T data) { - if (data.equals(null)) { - throw new NullPointerException("정확한 입력이 필요해요!"); - } - // 큐 마지막에 데이터 추가 - queue.addLast(data); - } - - public T dequeue() { - // 널체크 - if (isValid()) { - throw new NullPointerException("정확한 입력이 필요해요!"); - } - // 가장 먼저 추가된 데이터를 제거하고 return - return queue.removeFirst(); - } - - public boolean isValid() { - return queue.isEmpty(); - } - - -} diff --git a/src/main/java/Stack.java b/src/main/java/Stack.java deleted file mode 100644 index 43637d158..000000000 --- a/src/main/java/Stack.java +++ /dev/null @@ -1,37 +0,0 @@ -import java.util.ArrayList; -import java.util.List; - -public class Stack { - private List stack; - private int size; - - public Stack() { - this.stack = new ArrayList<>(); - this.size = stack.size(); - } - - // 요소 추가하는 stack push - public void push(T stringOrInteger) { - stack.add(stringOrInteger); - } - - // 요소 제거와 반환하는 stack pop - public T pop() { - try { - // 입력값 널 체크 - if (isValid()) { - throw new NullPointerException("비어있는 값이 입력되었습니다. \n 올바른 값을 입력해주세요"); - } - // 가장 최근에 추가된 요소 제거후 최상위값 return - return stack.remove(stack.size() - 1); - } catch (NullPointerException e) { - System.out.println(e.getMessage()); - return null; - } - } - - - private boolean isValid() { - return stack.isEmpty(); - } -} diff --git a/src/main/java/TwoStackForQueue.java b/src/main/java/TwoStackForQueue.java deleted file mode 100644 index 761f6afb3..000000000 --- a/src/main/java/TwoStackForQueue.java +++ /dev/null @@ -1,38 +0,0 @@ -import java.util.Stack; - -public class TwoStackForQueue { - - private Stack input; - private Stack output; - - public TwoStackForQueue() { - this.input = new Stack<>(); - this.output = new Stack<>(); - } - - // 인큐로 데이터를 추가한다 - public void enqueue(T data) { - // 널체크 - if (data.equals(null) || (data instanceof String - && ((String) data) - .trim() - .isEmpty())) { - throw new NullPointerException("입력이 누락되었습니다"); - } - input.push(data); - } - - public T dequeue() { - if(output.isEmpty()) { - while(!input.isEmpty()){ - output.push(input.pop()); - } - } - // output 스택에서 요소를 pop하여 반환 - return output.pop(); - } - - public boolean isEmpty() { - return input.isEmpty() && output.isEmpty(); - } -} diff --git a/src/test/java/AnagramTest.java b/src/test/java/AnagramTest.java deleted file mode 100644 index 2d9ca3333..000000000 --- a/src/test/java/AnagramTest.java +++ /dev/null @@ -1,77 +0,0 @@ -import org.junit.jupiter.api.Test; - -import java.util.ArrayList; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; - -//class AnagramTest { -// -// Anagram anagram = new Anagram(); -// @Test -// void replace() { -// String actual = "abc".replace("b", "d"); -// assertThat(actual).isEqualTo("adc"); -// } -// -// @Test -// void 아나그램을_아나그램_리스트에_저장() { -// -// -// -// } -// -// @Test -// void 아나그램_리스트를_오름차순으로_정렬하여_return() { -// -// } -// -// @Test -// void 아나그램으로_분류된_문자열을_리스트에_저장() { -// -// } -// -// -// @Test -// void 문자열간_비교를_통해__동일한_char을_모두_포함하는지_검증() { -// -// } -// -// @Test -// void 배열_인덱스_길이_만큼_탐색() { -// -// } -// -// @Test -// void 배열_인덱스_별_문자열_길이만큼_탐색() { -// Anagram.s -// } -// /** -// * // 배열 인덱스 길이 만큼 탐색 -// * for (int i = 0; i < strs.length; i++) { -// * // 배열 인덱스 별 문자열 길이만큼 탐색 -// * for (int j = 0; j < strs[i].length(); j++) { -// * // 문자열 끼리 비교하여 동일한 char을 모두 포함하는지 검증 필요 -// * for (char index : string) { -// * if (string.contains(index)) { -// * count++; -// * } -// * } -// * -// * // 아나그램으로 분류된 문자열을 리스트에 저장 -// * if(count==string.length()) { -// * anagram.add(string); -// * } -// * } -// * -// * // 아나그램을 아나그램 리스트에 저장 -// * List> aa = anagramsList.add(anagram); -// * -// * } -// * -// * // 아나그램 리스트를 오름차순으로 정렬하여 return -// * return Collections.sort(anagramsList); -// */ - -//} \ No newline at end of file diff --git a/src/test/java/DeleteStringTest.java b/src/test/java/DeleteStringTest.java deleted file mode 100644 index 5152d2916..000000000 --- a/src/test/java/DeleteStringTest.java +++ /dev/null @@ -1,83 +0,0 @@ -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -import java.util.Random; - -import static java.lang.String.valueOf; -import static org.junit.jupiter.api.Assertions.*; - - -class DeleteStringTest { - - @Test - void 물음표가_있을_경우_0_또는_1을_반환() { - String S = "0, 1, ? "; - for(char index : S.toCharArray()) { - if (valueOf(index).equals("?")) { - Random random = new Random(); - int temp = random.nextInt(1); - } - } - - assertEquals(S, "0,1,1"); - } - // 문자열 앞의 숫자가 연속될 경우 1개 이상을 지운다 - // 성공은 실패가 주는 패배감을 진정으로 두려워하지 않을 때 시작된다 - @Test - void 문자열_앞의_숫자가_연속될_경우_1개_이상을_지운다() { - String given = "110"; - - char[] givenCharArray = given.toCharArray(); - for (int i = 0; i < givenCharArray.length; i++) { - boolean valid = givenCharArray[i] == givenCharArray[i + 1]; - if (valid) { - given.replace(givenCharArray[i], givenCharArray[i + 1]); - } - } - - - } -// 문자열 뒤의 숫자가 연속될 경우 1개 이상을 지운다 - @Test - void 문자열_뒤의_숫자가_연속될_경우_1개_이상을_지운다() { - String given = "0011110000011000000"; - - String[] givenArray = new String[given.length()]; - - - for (String index : givenArray) { - // 성공은 실패가 주는 패배감을 진정으로 두려워하지 않을 때 시작된다 - // 매달린다고 뭐가 되나 - - } - } -// 준범과 명섭의 차례를 반환한다 - @Test - void 준범과_명섭의_차례를_반환한다() { - boolean joonbeom = false; - boolean myeongsub = false; - } -// 패배를 정의한다 (더 이상 할 수 있는 행동이 없는 경우) - @ParameterizedTest - @ValueSource(strings = {"0", "1", ""}) - void 패배를_정의한다(String given) { - boolean end = false; - String givenZero = "0"; - String givenOne = "1"; - String givenNull = ""; - if (given.equals(givenZero)) { - end = true; - } - if (given.equals(givenOne)) { - end = true; - } - if (given.equals(givenNull)) { - end = true; - } - - // 승부는 성장의 기회 - - - } -} \ No newline at end of file diff --git a/src/test/java/QueueTest.java b/src/test/java/QueueTest.java deleted file mode 100644 index 8dd81db20..000000000 --- a/src/test/java/QueueTest.java +++ /dev/null @@ -1,52 +0,0 @@ -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -import static org.junit.jupiter.api.Assertions.*; - -class QueueTest { - - private Queue queue; - @BeforeEach - void setUp() { - queue = new Queue<>(); - } - - @ParameterizedTest - @ValueSource(ints = {1, 2, 3, 4, 5}) - void 큐에_요소를_추가하면_널체크가_실패후_가장_먼저_추가된_요소_제거됨(int data){ - queue.enqueue(data); - assertFalse(queue.isValid()); - assertEquals(data, queue.dequeue()); - } - - @Test - void 가장_먼저_추가된_요소가_제거된다() { - int[] given = {1, 2, 3, 4, 5}; - for (int index : given) { - queue.enqueue(index); - } - - // FIFO로 먼저 추가된 값이 제거되는지 확인 - for(int expected : given) { - assertEquals(expected, queue.dequeue()); - } - } - - - - @Test - void 널체크_유효시_익셉션() { - // given - String given = "정확한 입력이 필요해요!"; - - // when - NullPointerException exception = assertThrows(NullPointerException.class, () -> { - queue.dequeue(); - }); - - // then - assertEquals(given, exception.getMessage()); - } -} \ No newline at end of file diff --git a/src/test/java/StackTest.java b/src/test/java/StackTest.java deleted file mode 100644 index 2fd2f28a2..000000000 --- a/src/test/java/StackTest.java +++ /dev/null @@ -1,46 +0,0 @@ -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class StackTest { - - private Stack stack; - - @BeforeEach - void setUp() { - stack = new Stack<>(); - String[] lifo = {"last", "in", "first", "out"}; - - // 스택에 요소를 추가 - for (String index : lifo) { - stack.push(index); - } - } - - @Test - void 비어있는_값_입력시_널_포인터_반환() { - // given - stack.push(""); // 입력값을 스택에 추가 - - // when - NullPointerException given = assertThrows(NullPointerException.class, () -> { - stack.pop(); - }); - - // then - assertEquals("비어있는 값이 입력되었습니다. \n 올바른 값을 입력해주세요", given.getMessage()); - } - - @Test - void 가장_최근에_추가된_데이터를_삭제한다() { - - //then - - // 정상 동작 체크 - assertEquals("out", stack.pop()); - assertEquals("first", stack.pop()); - assertEquals("in", stack.pop()); - assertEquals("last", stack.pop()); - } -} \ No newline at end of file diff --git a/src/test/java/TwoStackForQueueTest.java b/src/test/java/TwoStackForQueueTest.java deleted file mode 100644 index 34fd64de1..000000000 --- a/src/test/java/TwoStackForQueueTest.java +++ /dev/null @@ -1,51 +0,0 @@ -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -class TwoStackForQueueTest { - - private TwoStackForQueue queue; - - @BeforeEach - void setUp() { - queue = new TwoStackForQueue<>(); - } - - - @Test - void 인큐가_정상이면_널체크_건너뜀() { - queue.enqueue("hello"); - assertFalse(queue.isEmpty()); - } - - @Test - void 널체크_유효시_예외_처리() { - assertThrows(NullPointerException.class, () -> { - queue.enqueue(null); - }); - - assertThrows(NullPointerException.class, () -> { - queue.enqueue(""); - }); - - assertThrows(NullPointerException.class, () -> { - queue.enqueue(" "); - }); - } - - @Test - void 큐에_가장_먼저_추가된_요소가_제거() { - String[] given = {"two", "stack", "for", "implements", "queue"}; - - for (String value : given) { - queue.enqueue(value); - } - - assertEquals("two", queue.dequeue()); - assertEquals("stack", queue.dequeue()); - assertEquals("for", queue.dequeue()); - assertEquals("implements", queue.dequeue()); - assertEquals("queue", queue.dequeue()); - } -} \ No newline at end of file diff --git a/src/test/java/study/StringTest.java b/src/test/java/study/StringTest.java index 43e47d90b..b66159ab9 100644 --- a/src/test/java/study/StringTest.java +++ b/src/test/java/study/StringTest.java @@ -7,7 +7,7 @@ public class StringTest { @Test void replace() { - String actual = "abc".replace("b", "d"); - assertThat(actual).isEqualTo("adc"); + String actual = "abc".replace("abc", "betterplace"); + assertThat(actual).isEqualTo("betterplace"); } } From 2b62901cf73a5331aed473da9e21c41a64b66b50 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Wed, 19 Jun 2024 11:08:34 +0900 Subject: [PATCH 05/16] =?UTF-8?q?test(SetTest)=20:=20set=20=EC=BD=9C?= =?UTF-8?q?=EB=A0=89=EC=85=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/SetTest.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/test/java/study/SetTest.java diff --git a/src/test/java/study/SetTest.java b/src/test/java/study/SetTest.java new file mode 100644 index 000000000..df0d52fb7 --- /dev/null +++ b/src/test/java/study/SetTest.java @@ -0,0 +1,32 @@ +package study; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.HashSet; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +public class SetTest { + private Set numbers; + + @BeforeEach + void setUp() { + numbers = new HashSet<>(); + numbers.add(1); + numbers.add(1); + numbers.add(2); + numbers.add(3); + } + + @ParameterizedTest + @ValueSource(ints = {1, 2, 3}) + void set의_요소가_123(int number) { + // then + assertTrue(numbers.contains(number)); + } +} From 1c0e56eac60fc6535bf28d839070e85c29e17ff6 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Wed, 19 Jun 2024 11:17:31 +0900 Subject: [PATCH 06/16] =?UTF-8?q?test(SetTest)=20:=20=EC=95=84=EB=AC=B4=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=202=EA=B0=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/SetTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/test/java/study/SetTest.java b/src/test/java/study/SetTest.java index df0d52fb7..82da5ec1d 100644 --- a/src/test/java/study/SetTest.java +++ b/src/test/java/study/SetTest.java @@ -1,9 +1,11 @@ package study; +import org.assertj.core.util.Strings; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; import java.util.HashSet; @@ -29,4 +31,18 @@ void setUp() { // then assertTrue(numbers.contains(number)); } + +// // 왜 이런겨 +// @ParameterizedTest +// @ValueSource(strings = {"", " "}) +// void isBlank_ShouldReturnTrueForNullOrBlankStrings(String input) { +// assertTrue(Strings.isNullOrEmpty(input)); +// } + + @ParameterizedTest + @CsvSource(value = {"test:test", "tEst:test", "Java:java"}, delimiter = ':') + void toLowerCase_ShouldGenerateTheExpectedLowercaseValue(String input, String expected) { + String actual = input.toLowerCase(); + assertEquals(expected, actual); + } } From 5cbc4eec6e760a2e18b0f5ac9f849e1f227e95b4 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Wed, 19 Jun 2024 11:56:48 +0900 Subject: [PATCH 07/16] =?UTF-8?q?test(CalculatorTest)=20:=20=EA=B3=84?= =?UTF-8?q?=EC=82=B0=EA=B8=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/test/java/study/CalculatorTest.java diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java new file mode 100644 index 000000000..bc560003e --- /dev/null +++ b/src/test/java/study/CalculatorTest.java @@ -0,0 +1,38 @@ +package study; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.Arrays; +import java.util.List; +import java.util.Stack; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * 요구사항 + * 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다. + * 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다. + * 예를 들어 "2 + 3 * 4 / 2"와 같은 문자열을 입력할 경우 2 + 3 * 4 / 2 실행 결과인 10을 출력해야 한다. + */ +public class CalculatorTest { + + @ParameterizedTest + @ValueSource(strings = {"1", "2", "3", "4"}) + void 문자열_입력_테스트(String request) { + // given + int[] expect = {1, 2, 3, 4}; + + int actual = Integer.parseInt(request); + + boolean assertion = Arrays.stream(expect).anyMatch(i -> i == actual); + assertTrue(assertion); + } + +} From 12d6fcdab0be65f638c0b2ae92fa1981956dbb25 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Sat, 22 Jun 2024 12:42:38 +0900 Subject: [PATCH 08/16] fix : rebase --- src/test/java/study/CalculatorTest.java | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index bc560003e..96dfc309d 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -6,8 +6,10 @@ import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; +import java.io.ByteArrayInputStream; import java.util.Arrays; import java.util.List; +import java.util.Scanner; import java.util.Stack; import java.util.stream.Collectors; import java.util.stream.IntStream; @@ -35,4 +37,28 @@ public class CalculatorTest { assertTrue(assertion); } + @ParameterizedTest + @ValueSource(strings = {"1", "2", "3", "4"}) + void 입력된_문자열로_덧셈_연산(String request) { + // given + System.setIn(new ByteArrayInputStream(request.getBytes())); + Scanner scanner = new Scanner(System.in); + int expect = 10; + int actual = 0; + + int[] adds = Arrays + .stream(request.split(" ")) + .mapToInt(Integer::parseInt) + .toArray(); + + // when + for (int add : adds) { + actual += add; + } + + // then + assertEquals(expect, actual); + + } + } From 379302f9c5e19acef969d40892cce4493ce00867 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Sat, 22 Jun 2024 12:59:18 +0900 Subject: [PATCH 09/16] =?UTF-8?q?test=20:=20=EC=95=84=EB=8B=88=20=EC=9D=B4?= =?UTF-8?q?=EA=B1=B0=20=EC=99=9C=EC=95=8A=EB=8F=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index 96dfc309d..b7b92ef83 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -1,6 +1,7 @@ package study; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -25,6 +26,7 @@ */ public class CalculatorTest { + @ParameterizedTest @ValueSource(strings = {"1", "2", "3", "4"}) void 문자열_입력_테스트(String request) { @@ -37,14 +39,16 @@ public class CalculatorTest { assertTrue(assertion); } + @DisplayName("사용자 입력 덧셈 연산") @ParameterizedTest @ValueSource(strings = {"1", "2", "3", "4"}) - void 입력된_문자열로_덧셈_연산(String request) { + void addGivenNumbers(String request) { // given System.setIn(new ByteArrayInputStream(request.getBytes())); Scanner scanner = new Scanner(System.in); + int expect = 10; - int actual = 0; + int actual = Integer.parseInt(scanner.nextLine()); int[] adds = Arrays .stream(request.split(" ")) From 9f477b3f6a6086eae95999b02e57c45ea6496f68 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Mon, 24 Jun 2024 12:56:12 +0900 Subject: [PATCH 10/16] =?UTF-8?q?test(CalculatorTest)=20:=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=20=EA=B3=84=EC=82=B0=EA=B8=B0=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 43 +++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index b7b92ef83..3a0ff2aae 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -41,8 +41,8 @@ public class CalculatorTest { @DisplayName("사용자 입력 덧셈 연산") @ParameterizedTest - @ValueSource(strings = {"1", "2", "3", "4"}) - void addGivenNumbers(String request) { + @ValueSource(strings = {"1", "2"}) + void addGiven(String request) { // given System.setIn(new ByteArrayInputStream(request.getBytes())); Scanner scanner = new Scanner(System.in); @@ -62,7 +62,44 @@ void addGivenNumbers(String request) { // then assertEquals(expect, actual); + } + + @DisplayName("사용자 입력 뺄셈 연산") + @ParameterizedTest + @ValueSource(strings = {"3", "2"}) + void minusGiven(String request) { + // given + int expect = 3 - 2; + int minus = Integer.parseInt(request); + + int actual = minus - minus; + + assertEquals(expect, actual); + } + + @DisplayName("사용자 입력 곱셈 연산") + @ParameterizedTest + @ValueSource(strings = {"1", "2"}) + void multipleGiven(String request) { + // given + int expect = 1 * 2; + int multiple = Integer.parseInt(request); + + int actual = multiple * multiple; + assertEquals(expect, actual); } -} + @DisplayName("사용자 입력 나눗셈 연산") + @ParameterizedTest + @ValueSource(strings = {"10", "5"}) + void divisionGiven(String request) { + // given + int expect = 10 / 5; + int division = Integer.parseInt(request); + + int actual = division * division; + + assertEquals(expect, actual); + } +} \ No newline at end of file From c8f019bf6e4c509e0f95529514e93ffc0de7a299 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Wed, 26 Jun 2024 16:24:33 +0900 Subject: [PATCH 11/16] =?UTF-8?q?test=20:=20=EC=95=84=EB=AC=B4=EB=A7=90=20?= =?UTF-8?q?=EC=A3=BC=EC=A0=88=EC=A3=BC=EC=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index 3a0ff2aae..fc3e92fcc 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -9,11 +9,7 @@ import java.io.ByteArrayInputStream; import java.util.Arrays; -import java.util.List; import java.util.Scanner; -import java.util.Stack; -import java.util.stream.Collectors; -import java.util.stream.IntStream; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -102,4 +98,6 @@ void divisionGiven(String request) { assertEquals(expect, actual); } + + //dddsdkgewogdos;nagkewnkavd } \ No newline at end of file From 0fcd60afea6113a673113390d880af5bbb0eccbf Mon Sep 17 00:00:00 2001 From: fortune-man Date: Thu, 27 Jun 2024 18:02:06 +0900 Subject: [PATCH 12/16] =?UTF-8?q?test:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20=EB=8D=A7=EC=85=88=20=EC=9D=B4?= =?UTF-8?q?=EA=B2=8C=20=EC=99=9C=20=EB=8F=8C=EC=95=84=EA=B0=80=20=EC=95=8A?= =?UTF-8?q?=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 91 +++++-------------------- 1 file changed, 18 insertions(+), 73 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index fc3e92fcc..fb010ecbc 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -1,5 +1,6 @@ package study; +import java.io.InputStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -22,82 +23,26 @@ */ public class CalculatorTest { - - @ParameterizedTest - @ValueSource(strings = {"1", "2", "3", "4"}) - void 문자열_입력_테스트(String request) { - // given - int[] expect = {1, 2, 3, 4}; - - int actual = Integer.parseInt(request); - - boolean assertion = Arrays.stream(expect).anyMatch(i -> i == actual); - assertTrue(assertion); - } - - @DisplayName("사용자 입력 덧셈 연산") - @ParameterizedTest - @ValueSource(strings = {"1", "2"}) - void addGiven(String request) { - // given - System.setIn(new ByteArrayInputStream(request.getBytes())); - Scanner scanner = new Scanner(System.in); - - int expect = 10; - int actual = Integer.parseInt(scanner.nextLine()); - - int[] adds = Arrays - .stream(request.split(" ")) - .mapToInt(Integer::parseInt) - .toArray(); - - // when - for (int add : adds) { - actual += add; - } - - // then - assertEquals(expect, actual); + private InputStream setReadLine(String readLine) { + return new ByteArrayInputStream(readLine.getBytes()); } + @DisplayName("1+1 테스트") + @Test + public void testAdd() { + int expect = 2; + int actual = 0; + String input = "1+1"; + for (String index : input.split("")) { + if (index.equals("+")) { + continue; + } + int indexs = Integer.parseInt(index); + actual = Math.addExact(indexs,indexs); + } - @DisplayName("사용자 입력 뺄셈 연산") - @ParameterizedTest - @ValueSource(strings = {"3", "2"}) - void minusGiven(String request) { - // given - int expect = 3 - 2; - int minus = Integer.parseInt(request); + assertEquals(expect,actual); - int actual = minus - minus; + } - assertEquals(expect, actual); - } - - @DisplayName("사용자 입력 곱셈 연산") - @ParameterizedTest - @ValueSource(strings = {"1", "2"}) - void multipleGiven(String request) { - // given - int expect = 1 * 2; - int multiple = Integer.parseInt(request); - - int actual = multiple * multiple; - - assertEquals(expect, actual); - } - - @DisplayName("사용자 입력 나눗셈 연산") - @ParameterizedTest - @ValueSource(strings = {"10", "5"}) - void divisionGiven(String request) { - // given - int expect = 10 / 5; - int division = Integer.parseInt(request); - - int actual = division * division; - - assertEquals(expect, actual); - } - //dddsdkgewogdos;nagkewnkavd } \ No newline at end of file From 123dc1df2e88e7b41379be496ac269a37c0fe8d6 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Fri, 28 Jun 2024 21:57:36 +0900 Subject: [PATCH 13/16] =?UTF-8?q?test:=20index=EA=B0=80=200=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B6=84=EB=A6=AC=EB=90=98=EC=96=B4=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 58 +++++++++++++++++++++++-- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index fb010ecbc..30b6d2ace 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -29,20 +29,72 @@ private InputStream setReadLine(String readLine) { @DisplayName("1+1 테스트") @Test public void testAdd() { - int expect = 2; + int expect = 1+1; int actual = 0; String input = "1+1"; for (String index : input.split("")) { if (index.equals("+")) { continue; } - int indexs = Integer.parseInt(index); - actual = Math.addExact(indexs,indexs); + int parsing = Integer.parseInt(index); + actual = Math.addExact(parsing,parsing); } assertEquals(expect,actual); } + @DisplayName("1-1 테스트") + @Test + public void testMinus() { + int expect = 1-1; + int actual = 0; + String input = "1-1"; + for (String index : input.split("")) { + if (index.equals("-")) { + continue; + } + int parsing = Integer.parseInt(index); + actual = Math.subtractExact(parsing,parsing); + } + + assertEquals(expect,actual); + + } + @DisplayName("1*10 테스트") + @Test + public void testMultiple() { + int expect = 1*10; + int actual = 10; + String input = "1*10"; + for (String index : input.split("")) { + if (index.equals("*")) { + continue; + } + int parsing = Integer.parseInt(index); + actual = Math.multiplyExact(parsing,parsing); + } + + assertEquals(expect,actual); + + } + @DisplayName("10/5 테스트") + @Test + public void testDivision() { + int expect = 10 / 5; + int actual = 0; + String input = "10/5"; + for (String index : input.split("")) { + if (index.equals("/")) { + continue; + } + int parsing = Integer.parseInt(index); + actual = Math.floorDiv(parsing,parsing); + } + + assertEquals(expect,actual); + + } + } \ No newline at end of file From 23ee0ba31d1b4b93931d21130eb5987821ce84c7 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Sun, 30 Jun 2024 21:06:18 +0900 Subject: [PATCH 14/16] =?UTF-8?q?test=20:=20=EC=9E=85=EB=A0=A5=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=EC=97=B4=20=EC=88=9C=EC=84=9C=EB=8C=80=EB=A1=9C=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=EC=8B=A4=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index 30b6d2ace..fe804c8b5 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -12,6 +12,7 @@ import java.util.Arrays; import java.util.Scanner; +import static java.lang.Math.floorDiv; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -53,42 +54,44 @@ public void testMinus() { if (index.equals("-")) { continue; } - int parsing = Integer.parseInt(index); - actual = Math.subtractExact(parsing,parsing); + int parsingFirst = Integer.parseInt(index); + int parsingNext = Integer.parseInt(index); + actual = Math.subtractExact(parsingFirst,parsingNext); } assertEquals(expect,actual); } - @DisplayName("1*10 테스트") + @DisplayName("5*2 테스트") @Test public void testMultiple() { - int expect = 1*10; + int expect = 5*2; int actual = 10; - String input = "1*10"; + String input = "5*2"; for (String index : input.split("")) { if (index.equals("*")) { continue; } - int parsing = Integer.parseInt(index); - actual = Math.multiplyExact(parsing,parsing); + int parsingFirst = Integer.parseInt(index); + int parsingNext = Integer.parseInt(index); + actual = Math.multiplyExact(parsingFirst,parsingNext); } assertEquals(expect,actual); } - @DisplayName("10/5 테스트") + @DisplayName("8/4 테스트") @Test public void testDivision() { - int expect = 10 / 5; + int expect = 8 / 4; int actual = 0; - String input = "10/5"; + String input = "8/4"; for (String index : input.split("")) { if (index.equals("/")) { continue; } int parsing = Integer.parseInt(index); - actual = Math.floorDiv(parsing,parsing); + actual = floorDiv(parsing, parsing); } assertEquals(expect,actual); From e030ba105efd80913e692b7678ef3697fe8327a0 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Mon, 1 Jul 2024 10:19:29 +0900 Subject: [PATCH 15/16] =?UTF-8?q?test=20:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20=EA=B5=AC=ED=98=84=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 92 +++++++++---------------- 1 file changed, 31 insertions(+), 61 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index fe804c8b5..10112c955 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -1,6 +1,9 @@ package study; import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Stack; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -24,77 +27,44 @@ */ public class CalculatorTest { - private InputStream setReadLine(String readLine) { - return new ByteArrayInputStream(readLine.getBytes()); - } - @DisplayName("1+1 테스트") - @Test - public void testAdd() { - int expect = 1+1; - int actual = 0; - String input = "1+1"; - for (String index : input.split("")) { - if (index.equals("+")) { - continue; - } - int parsing = Integer.parseInt(index); - actual = Math.addExact(parsing,parsing); - } - - assertEquals(expect,actual); + private boolean operation(String index){ + return index.equals("+") || index.equals("-") || index.equals("*") || index.equals("/"); + } - } - @DisplayName("1-1 테스트") + @DisplayName("입력값 숫자 / 연산기호 구분 테스트") @Test - public void testMinus() { - int expect = 1-1; - int actual = 0; - String input = "1-1"; - for (String index : input.split("")) { - if (index.equals("-")) { - continue; + void testInput() { + //given + int expect = 10; + //when + Stack number = new Stack<>(); + String input = "2 + 3 * 4 / 2"; + String[] index = input.split(" "); + if(operation(index[0])){ + if (index.equals("+")){ + int add = Integer.parseInt(index) + Integer.parseInt(index); + number.push(add); } - int parsingFirst = Integer.parseInt(index); - int parsingNext = Integer.parseInt(index); - actual = Math.subtractExact(parsingFirst,parsingNext); - } + if (index.equals("-")){ + int minus = Integer.parseInt(index) + Integer.parseInt(index); + number.push(minus); - assertEquals(expect,actual); + } + if (index.equals("*")){ + int multiple = Integer.parseInt(index) + Integer.parseInt(index); + number.push(multiple); - } - @DisplayName("5*2 테스트") - @Test - public void testMultiple() { - int expect = 5*2; - int actual = 10; - String input = "5*2"; - for (String index : input.split("")) { - if (index.equals("*")) { - continue; } - int parsingFirst = Integer.parseInt(index); - int parsingNext = Integer.parseInt(index); - actual = Math.multiplyExact(parsingFirst,parsingNext); + if (index.equals("/")){ + int division = Integer.parseInt(index) + Integer.parseInt(index); + number.push(division); + } } - assertEquals(expect,actual); + Integer actual = number.peek(); - } - @DisplayName("8/4 테스트") - @Test - public void testDivision() { - int expect = 8 / 4; - int actual = 0; - String input = "8/4"; - for (String index : input.split("")) { - if (index.equals("/")) { - continue; - } - int parsing = Integer.parseInt(index); - actual = floorDiv(parsing, parsing); - } - assertEquals(expect,actual); + assertEquals(expect, actual); } From 96a2164a633a6b710045acb9fe458adb4d325ba2 Mon Sep 17 00:00:00 2001 From: fortune-man Date: Mon, 1 Jul 2024 10:26:15 +0900 Subject: [PATCH 16/16] =?UTF-8?q?refactor=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A7=80=EC=9A=B0=EA=B3=A0=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9?= =?UTF-8?q?=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/study/CalculatorTest.java | 59 +++++++------------------ 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/src/test/java/study/CalculatorTest.java b/src/test/java/study/CalculatorTest.java index 10112c955..25ede7890 100644 --- a/src/test/java/study/CalculatorTest.java +++ b/src/test/java/study/CalculatorTest.java @@ -7,17 +7,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; -import org.junit.jupiter.params.provider.ValueSource; - -import java.io.ByteArrayInputStream; -import java.util.Arrays; -import java.util.Scanner; - -import static java.lang.Math.floorDiv; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; /** * 요구사항 @@ -27,47 +17,32 @@ */ public class CalculatorTest { - private boolean operation(String index){ - return index.equals("+") || index.equals("-") || index.equals("*") || index.equals("/"); - } + // 컨텍스트 : 입력순서대로 사칙연산을 실행하는 프로그램 + // 기능 목록 + // 순서대로 계산 여부 테스트 + // 계산 결과 저장 테스트 + // 저장된 결과를 순서대로 계산 테스트 - @DisplayName("입력값 숫자 / 연산기호 구분 테스트") + @DisplayName("순서대로 계산 여부 테스트") @Test - void testInput() { - //given - int expect = 10; - //when - Stack number = new Stack<>(); - String input = "2 + 3 * 4 / 2"; - String[] index = input.split(" "); - if(operation(index[0])){ - if (index.equals("+")){ - int add = Integer.parseInt(index) + Integer.parseInt(index); - number.push(add); - } - if (index.equals("-")){ - int minus = Integer.parseInt(index) + Integer.parseInt(index); - number.push(minus); + void calculateInOrder(){ - } - if (index.equals("*")){ - int multiple = Integer.parseInt(index) + Integer.parseInt(index); - number.push(multiple); - - } - if (index.equals("/")){ - int division = Integer.parseInt(index) + Integer.parseInt(index); - number.push(division); - } - } + } - Integer actual = number.peek(); + @DisplayName("계산 결과 저장 테스트") + @Test + void setResultTest(){ + } - assertEquals(expect, actual); + @DisplayName("저장된 결과를 순서대로 계산 테스트") + @Test + void calculateResultsInOrderTest(){ } + + } \ No newline at end of file