From 046c8ca0966fddd6c20a0ebb6c47888b451214f7 Mon Sep 17 00:00:00 2001 From: asllsa52 Date: Mon, 27 Oct 2025 21:19:37 +0900 Subject: [PATCH 1/2] feat: setup project --- .gitignore | 1 + README.md | 135 ++++++++++++++++++ Utech2CarRacing/.classpath | 10 ++ Utech2CarRacing/.gitignore | 1 + Utech2CarRacing/.project | 17 +++ .../org.eclipse.core.resources.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 11 ++ Utech2CarRacing/src/module-info.java | 8 ++ .../src/racingcar/Application.java | 131 +++++++++++++++++ 9 files changed, 316 insertions(+) create mode 100644 Utech2CarRacing/.classpath create mode 100644 Utech2CarRacing/.gitignore create mode 100644 Utech2CarRacing/.project create mode 100644 Utech2CarRacing/.settings/org.eclipse.core.resources.prefs create mode 100644 Utech2CarRacing/.settings/org.eclipse.jdt.core.prefs create mode 100644 Utech2CarRacing/src/module-info.java create mode 100644 Utech2CarRacing/src/racingcar/Application.java diff --git a/.gitignore b/.gitignore index 4f11bcf..8ba13ef 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /target/ .idea/ .vscode/ +/.metadata/ diff --git a/README.md b/README.md index ffbf080..7c808c9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD # java-racingcar-precourse ## 기능 @@ -31,3 +32,137 @@ ## 기타 - 잘못된 값 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료 +======= +{\rtf1\ansi\ansicpg949\cocoartf2822 +\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;\f1\fnil\fcharset129 AppleSDGothicNeo-Regular;} +{\colortbl;\red255\green255\blue255;} +{\*\expandedcolortbl;;} +{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid1\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid2\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li1440\lin1440 }{\listname ;}\listid1} +{\list\listtemplateid2\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid101\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid102\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li1440\lin1440 }{\listname ;}\listid2} +{\list\listtemplateid3\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid201\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid3} +{\list\listtemplateid4\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{hyphen\}}{\leveltext\leveltemplateid301\'01\uc0\u8259 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid4}} +{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}} +\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0 +\deftab560 +\pard\pardeftab560\slleading20\partightenfactor0 + +\f0\fs26 \cf0 # java-car-racing\ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 ## \uc0\u44592 \u45733 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u51088 \u46041 \u52264 \u51060 \u47492 \u44284 \u49892 \u54665 \u54943 \u49688 \u47484 \u48512 \u50668 \u48155 \u45716 \u45796 .\ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl1 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u51088 \u46041 \u52264 \u51060 \u47492 \u51008 \u49788 \u54364 (,)\u47484 \u44592 \u51456 \u51004 \u47196 \u44396 \u48516 \u54616 \u44256 5\u51088 \u51060 \u54616 \u47564 \u44032 \u45733 \u54616 \u45796 .\ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u51452 \u50612 \u51652 \u54943 \u49688 \u46041 \u50500 n \u45824 \u51032 \u51088 \u46041 \u52264 \u45716 \u51204 \u51652 \u54616 \u44144 \u45208 \u47688 \u52656 \u51080 \u45716 \u45796 .\ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl1 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 0-9 \uc0\u49324 \u51060 \u51032 \u47924 \u51089 \u50948 \u44050 \u51012 \u44396 \u54620 \u54980 \u44536 \u44050 \u51060 4 \u51060 \u49345 \u51064 \u44221 \u50864 \u51204 \u51652 \u54620 \u45796 .\ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u49892 \u54665 \u51060 \u54620 \u48264 \u45149 \u45216 \u46412 \u47560 \u45796 \u49892 \u54665 \u44208 \u44284 \u47484 \u52636 \u47141 \u54616 \u44256 \u51060 \u46412 \u51088 \u46041 \u52264 \u51060 \u47492 \u51012 \u44057 \u51060 \u52636 \u47141 \u54620 \u45796 .\ +\ls1\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u51088 \u46041 \u52264 \u44221 \u51452 \u44172 \u51076 \u51012 \u50756 \u47308 \u54620 \u54980 \u45572 \u44032 \u50864 \u49849 \u54664 \u45716 \u51648 \u47484 \u50508 \u47140 \u51456 \u45796 . \u50864 \u49849 \u51088 \u45716 \u54620 \u47749 \u51060 \u49345 \u51068 \u49688 \u51080 \u45796 .\ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl1 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u44277 \u46041 \u50864 \u49849 \u51032 \u44221 \u50864 \u49788 \u54364 (,)\u47484 \u49324 \u50857 \u54644 \u44396 \u48516 \u54620 \u45796 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls1\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u49324 \u50857 \u51088 \u44032 \u51096 \u47803 \u46108 \u44050 \u51012 \u51077 \u47141 \u54624 \u44221 \u50864 \'a0IllegalArgumentException\u51012 \u48156 \u49373 \u49884 \u53416 \u54980 \u50528 \u54540 \u47532 \u52992 \u51060 \u49496 \u51008 \u51333 \u47308 \u46104 \u50612 \u50556 \u54620 \u45796 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 \ +## \uc0\u49892 \u54665 \u48169 \u48277 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls2\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u44221 \u51452 \u54624 \u51088 \u46041 \u52264 \u51060 \u47492 \u51012 \u51077 \u47141 \u54620 \u45796 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls2\ilvl1 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u51088 \u46041 \u52264 \u51060 \u47492 \u51012 \u49788 \u54364 (,) \u44592 \u51456 \u51004 \u47196 \u44396 \u48516 \u54620 \u45796 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls2\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u49884 \u46020 \u54624 \u54943 \u49688 \u47484 \u51077 \u47141 \u54620 \u45796 \ +\ls2\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u52264 \u49688 \u48324 \u49892 \u54665 \u44208 \u44284 \u47484 \u52636 \u47141 \u54620 \u45796 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls2\ilvl1 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u51652 \u52636 \u54620 \u47564 \u53372 -\u47196 \u54364 \u49884 \u54620 \u45796 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls2\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u50864 \u49849 \u51088 \u47484 \u52636 \u47141 \u54620 \u45796 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls2\ilvl1 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u44277 \u46041 \u50864 \u49849 \u51032 \u44221 \u50864 \u49788 \u54364 (,)\u47196 \u44396 \u48516 \u54644 \u52636 \u47141 \u54620 \u45796 \ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 ## \uc0\u44396 \u54788 \u54624 \u44592 \u45733 \u47785 \u47197 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls3\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\fs26 \uc0\u51088 \u46041 \u52264 \u51060 \u47492 \u51077 \u47141 \u48155 \u44592 \ +\ls3\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u49892 \u54665 \u54943 \u49688 \u51077 \u47141 \u48155 \u44592 \ +\ls3\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u51312 \u44148 \u50640 \u46384 \u46972 \u51204 \u51652 \u54616 \u44592 \ +\ls3\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u49892 \u54665 \u44208 \u44284 \u52636 \u47141 \u54616 \u44592 \ +\ls3\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u50864 \u49849 \u51088 \u54032 \u48324 \u54616 \u44592 \ +\ls3\ilvl0 +\fs24 {\listtext \uc0\u8259 } +\fs26 \uc0\u50864 \u49849 \u51088 \u52636 \u47141 \u54616 \u44592 \ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 ## \uc0\u50756 \u47308 \u46108 \u44592 \u45733 \ +\pard\pardeftab560\slleading20\pardirnatural\partightenfactor0 +\cf0 \ +\pard\pardeftab560\slleading20\partightenfactor0 +\cf0 ## \uc0\u44592 \u53440 \ +\pard\pardeftab560\pardirnatural\partightenfactor0 +\ls4\ilvl0 +\fs24 \cf0 {\listtext \uc0\u8259 } +\f1\fs26 \'c0\'df\'b8\'f8\'b5\'c8 +\f0 +\f1 \'b0\'aa +\f0 +\f1 \'c0\'d4\'b7\'c2\'c7\'d2 +\f0 +\f1 \'b0\'e6\'bf\'ec +\f0 IllegalArgumentException +\f1 \'c0\'bb +\f0 +\f1 \'b9\'df\'bb\'fd\'bd\'c3\'c5\'b2 +\f0 +\f1 \'c8\'c4 +\f0 +\f1 \'be\'d6\'c7\'c3\'b8\'ae\'c4\'c9\'c0\'cc\'bc\'c7\'c0\'ba +\f0 +\f1 \'c1\'be\'b7\'e1 +\f0 \ +} +>>>>>>> 1f6cf6e (main application작성) diff --git a/Utech2CarRacing/.classpath b/Utech2CarRacing/.classpath new file mode 100644 index 0000000..463d5f9 --- /dev/null +++ b/Utech2CarRacing/.classpath @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Utech2CarRacing/.gitignore b/Utech2CarRacing/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/Utech2CarRacing/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/Utech2CarRacing/.project b/Utech2CarRacing/.project new file mode 100644 index 0000000..04e3162 --- /dev/null +++ b/Utech2CarRacing/.project @@ -0,0 +1,17 @@ + + + Utech2CarRacing + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Utech2CarRacing/.settings/org.eclipse.core.resources.prefs b/Utech2CarRacing/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..99f26c0 --- /dev/null +++ b/Utech2CarRacing/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Utech2CarRacing/.settings/org.eclipse.jdt.core.prefs b/Utech2CarRacing/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..9a7984b --- /dev/null +++ b/Utech2CarRacing/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 diff --git a/Utech2CarRacing/src/module-info.java b/Utech2CarRacing/src/module-info.java new file mode 100644 index 0000000..bb779c3 --- /dev/null +++ b/Utech2CarRacing/src/module-info.java @@ -0,0 +1,8 @@ +/** + * + */ +/** + * + */ +module Utech2CarRacing { +} \ No newline at end of file diff --git a/Utech2CarRacing/src/racingcar/Application.java b/Utech2CarRacing/src/racingcar/Application.java new file mode 100644 index 0000000..8e6665b --- /dev/null +++ b/Utech2CarRacing/src/racingcar/Application.java @@ -0,0 +1,131 @@ +package racingcar; + +import camp.nextstep.edu.missionutils.Console; +import camp.nextstep.edu.missionutils.Randoms; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +class Game { + public void start() { + InputView inputView = new InputView(); + ResultView resultView = new ResultView(); + + Cars cars = inputView.inputCarNames(); + int rounds = inputView.inputAttemptCount(); + + resultView.printResultMessage(); + + for (int i = 0; i < rounds; i++) { + cars.moveAll(); + resultView.printRound(cars); + } + + resultView.printWinners(cars.findWinners()); + } +} + +class InputView { + public Cars inputCarNames() { + System.out.println("경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)"); + String input = Console.readLine(); + List names = Arrays.stream(input.split(",")) + .map(String::trim) + .toList(); + return new Cars(names); + } + + public int inputAttemptCount() { + System.out.println("시도할 횟수는 몇 회인가요?"); + String input = Console.readLine(); + validateNumeric(input); + return Integer.parseInt(input); + } + + private void validateNumeric(String input) { + if (!input.matches("\\d+")) { + throw new IllegalArgumentException("숫자를 입력해야 합니다."); + } + } +} + +class ResultView { + public void printResultMessage() { + System.out.println(); + System.out.println("실행 결과"); + } + + public void printRound(Cars cars) { + for (Car car : cars.getCars()) { + System.out.println(car.getName() + " : " + "-".repeat(car.getPosition())); + } + System.out.println(); + } + + public void printWinners(List winners) { + System.out.println("최종 우승자 : " + String.join(", ", winners)); + } +} + +class Car { + private static final int MOVE_THRESHOLD = 4; + private final String name; + private int position = 0; + + public Car(String name) { + validateName(name); + this.name = name; + } + + private void validateName(String name) { + if (name == null || name.isEmpty() || name.length() > 5) { + throw new IllegalArgumentException("자동차 이름은 1~5자여야 합니다."); + } + } + + public void move() { + int randomNumber = Randoms.pickNumberInRange(0, 9); + if (randomNumber >= MOVE_THRESHOLD) { + position++; + } + } + + public String getName() { return name; } + public int getPosition() { return position; } +} + +class Cars { + private final List cars; + + public Cars(List names) { + this.cars = names.stream() + .map(Car::new) + .collect(Collectors.toList()); + } + + public void moveAll() { + cars.forEach(Car::move); + } + + public List getCars() { + return cars; + } + + public List findWinners() { + int max = cars.stream() + .mapToInt(Car::getPosition) + .max() + .orElse(0); + return cars.stream() + .filter(c -> c.getPosition() == max) + .map(Car::getName) + .collect(Collectors.toList()); + } +} + +public class Application { + public static void main(String[] args) { + Game game = new Game(); + game.start(); + } +} From ee8a481bb422e85998295632d4b3e5517e575ab9 Mon Sep 17 00:00:00 2001 From: asllsa52 Date: Mon, 27 Oct 2025 21:57:26 +0900 Subject: [PATCH 2/2] feat: setup project --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7c808c9..f87561f 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ ## 기타 - 잘못된 값 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료 + ======= {\rtf1\ansi\ansicpg949\cocoartf2822 \cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;\f1\fnil\fcharset129 AppleSDGothicNeo-Regular;}