diff --git a/README.md b/README.md index bd90ef0247..e2965dc454 100644 --- a/README.md +++ b/README.md @@ -1 +1,32 @@ -# java-calculator-precourse \ No newline at end of file +# ✨ 문자열 덧셈 계산기 (String Calculator) + +## 📘 구현 목표 +사용자로부터 입력받은 문자열에 포함된 "숫자들의 합"을 계산하여 출력하는 프로그램을 구현한다. +입력 문자열에는 쉼표(`,`), 콜론(`:`) 또는 커스텀 구분자를 사용할 수 있다. + + +## ✅ 기능 요구사항 + +- 입력 요구사항 + - 구분자와 양수로 이루어진 문자열을 입력받는다. + - 기본 구분자는 쉼표(`,`) 또는 콜론(`:`)이다. + - 구분자 이외에 **커스텀 구분자**를 지정할 수 있어야 한다. + - 문자열 앞부분의 `//`와 `\n` 사이에 위치한 문자를 구분자로 인식한다. + - 예시: + //;\n1;2;3 → 구분자는 ';' + + +- 입력 및 처리 흐름 + 1. 콘솔에 "덧셈할 문자열을 입력해주세요."를 출력한다. + 2. `Console.readLine()`을 통해 문자열 입력을 받는다. + 3. 입력받은 문자열을 `char` 형태로 쪼개어 하나씩 순회한다. + 4. 조건문 처리: + - `,` 또는 `:`을 발견하면 split 기준으로 간주하고 다음 문자로 이동한다. + - `//`가 존재하면 `\n` 사이에 있는 문자를 커스텀 구분자로 사용한다. + 5. 각 숫자(`char` → `int`)를 추출하여 합산한다. + 6. 입력 요구사항을 벗어나는 값이 들어오면 `IllegalArgumentException`을 발생시키고 프로그램을 종료한다. + +- 출력 요구사항 + - 숫자들의 합계를 계산한 뒤 다음 형식으로 결과를 출력한다. + + 결과 : 합계 diff --git a/gradle/wrapper/src/main/java/calculator/Application.java b/gradle/wrapper/src/main/java/calculator/Application.java new file mode 100644 index 0000000000..0d4e1658ec --- /dev/null +++ b/gradle/wrapper/src/main/java/calculator/Application.java @@ -0,0 +1,57 @@ +package calculator; + +import camp.nextstep.edu.missionutils.Console; +import java.util.regex.Pattern; + +public class Application { + public static void main(String[] args) { + System.out.println("덧셈할 문자열을 입력해주세요."); + String input = Console.readLine(); + + try { + int result = splitAndSum(input); + System.out.println("결과 : " + result); + } catch (IllegalArgumentException e) { + System.out.println("잘못된 입력입니다: " + e.getMessage()); + } + } + + public static int splitAndSum(String input) { + if (input == null || input.isEmpty()) { + return 0; + } + + String delimiters = ",|:"; // 기본 구분자 + String numbers = input; + + // 커스텀 구분자 처리 + if (input.startsWith("//")) { + int newlineIndex = input.indexOf("\n"); + if (newlineIndex == -1) { + throw new IllegalArgumentException("잘못된 구분자 형식입니다."); + } + String customDelimiter = input.substring(2, newlineIndex); + delimiters = Pattern.quote(customDelimiter); + numbers = input.substring(newlineIndex + 1); + } + + String[] tokens = numbers.split(delimiters); + int sum = 0; + + for (String token : tokens) { + if (token.isEmpty()) continue; + + try { + int number = Integer.parseInt(token); + if (number < 0) { + throw new IllegalArgumentException("음수는 허용되지 않습니다: " + number); + } + sum += number; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("숫자가 아닌 값이 포함되어 있습니다: " + token); + } + } + + return sum; + } +}