From 5fb509784f6789c6e3c3f86306a053be7a54962f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=ED=99=98?= Date: Sun, 3 Nov 2024 16:35:36 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[step3]=201=EC=B0=A8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/controller/LadderController.java | 3 +- src/main/java/domain/Ladder.java | 39 +++++++++++++++++++ src/main/java/domain/Participant.java | 23 +++++++++++ src/main/java/view/OutputView.java | 9 ++++- 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/main/java/domain/Participant.java diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 93dbd28..2eddea5 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -16,7 +16,8 @@ public Ladder createLadder() { } public void printResult(Ladder ladder){ - outputView.printResult(); + outputView.printResultText(); outputView.printLadder(ladder); + outputView.printResult(ladder.getParticipants()); } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index 100ee46..c1f1058 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -4,10 +4,21 @@ import java.util.List; public class Ladder { + private final List participants; private final List lines; public Ladder(Size ladderSize, Size lineSize) { + this.participants = generateParticipants(lineSize); this.lines = generateLines(ladderSize, lineSize); + getResult(); + } + + private List generateParticipants(Size lineSize) { + List participants = new ArrayList<>(); + for (int i = 0; i < lineSize.getSize(); i++) { + participants.add(new Participant(i)); + } + return participants; } private List generateLines(Size ladderSize, Size lineSize) { @@ -18,7 +29,35 @@ private List generateLines(Size ladderSize, Size lineSize) { return lines; } + private void getResult(){ + for (Line line : lines) { + changeByLine(line); + } + } + + private void changeByLine(Line line){ + for(int i = 0; i< line.getPoints().size() ; i++){ + changeByPoint(i,line.getPoints().get(i)); + } + } + + private void changeByPoint(int idx, Point point){ + if(point.isConnected()){ + swapEnds(idx); + } + } + + private void swapEnds(int idx){ + int temp = participants.get(idx).getEnd(); + participants.get(idx).setEnd(participants.get(idx+1).getEnd()); + participants.get(idx+1).setEnd(temp); + } + public List getLines() { return lines; } + + public List getParticipants() { + return participants; + } } diff --git a/src/main/java/domain/Participant.java b/src/main/java/domain/Participant.java new file mode 100644 index 0000000..217707c --- /dev/null +++ b/src/main/java/domain/Participant.java @@ -0,0 +1,23 @@ +package domain; + +public class Participant { + private final int start; + private int end; + + public Participant(int start) { + this.start = start; + this.end = start; + } + + public int getStart() { + return start; + } + + public int getEnd() { + return end; + } + + public void setEnd(int end) { + this.end = end; + } +} diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 4d411da..0763033 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -2,11 +2,13 @@ import domain.Ladder; import domain.Line; +import domain.Participant; import domain.Point; +import java.util.List; public class OutputView { - public void printResult(){ + public void printResultText(){ System.out.println("실행결과"); } @@ -25,4 +27,9 @@ public void printLine(Line line){ System.out.print("|"); } + public void printResult(List participants){ + for(Participant participant : participants){ + System.out.println(participant.getStart() + " -> " + participant.getEnd()); + } + } } From a1851a3cdf1df8ae619778aac3ef91aeda51fd63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=B1=ED=99=98?= Date: Wed, 11 Dec 2024 02:35:55 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[step3]=20=EC=82=AC=EB=8B=A4=EB=A6=AC=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/LadderApplication.java | 5 ++- .../java/controller/LadderController.java | 23 ++++++++++--- src/main/java/domain/Ladder.java | 34 ++++++++----------- src/main/java/domain/Participant.java | 2 +- src/main/java/domain/Participants.java | 15 ++++++++ src/main/java/service/LadderService.java | 29 ++++++++++++++++ src/main/java/view/InputView.java | 9 +++-- src/main/java/view/OutputView.java | 5 +-- src/test/java/domain/LadderTest.java | 21 ++++++++++++ 9 files changed, 109 insertions(+), 34 deletions(-) create mode 100644 src/main/java/domain/Participants.java create mode 100644 src/main/java/service/LadderService.java diff --git a/src/main/java/LadderApplication.java b/src/main/java/LadderApplication.java index 9e6b41f..d1b2089 100644 --- a/src/main/java/LadderApplication.java +++ b/src/main/java/LadderApplication.java @@ -1,10 +1,13 @@ import controller.LadderController; import domain.Ladder; +import domain.Participants; public class LadderApplication { public static void main(String[] args) { final LadderController ladderController = new LadderController(); Ladder ladder = ladderController.createLadder(); - ladderController.printResult(ladder); + Participants participants = ladderController.createParticipants(ladder.getWidth()); + ladderController.getResult(ladder, participants); + ladderController.printResult(ladder, participants); } } diff --git a/src/main/java/controller/LadderController.java b/src/main/java/controller/LadderController.java index 2eddea5..afcbceb 100644 --- a/src/main/java/controller/LadderController.java +++ b/src/main/java/controller/LadderController.java @@ -1,23 +1,36 @@ package controller; import domain.Ladder; +import domain.Participant; +import domain.Participants; import domain.Size; +import java.util.List; +import service.LadderService; import view.InputView; import view.OutputView; public class LadderController { private final OutputView outputView = new OutputView(); private final InputView inputView = new InputView(); + private final LadderService ladderService = new LadderService(); public Ladder createLadder() { - Size width = inputView.getLadderWidth(); - Size height = inputView.getLadderHeight(); - return new Ladder(height, width); + int width = inputView.getLadderWidth(); + int height = inputView.getLadderHeight(); + return ladderService.createLadder(height, width); } - public void printResult(Ladder ladder){ + public Participants createParticipants(int width) { + return ladderService.createParticipants(width); + } + + public void getResult(Ladder ladder, Participants participants) { + ladderService.getResult(ladder, participants); + } + + public void printResult(Ladder ladder, Participants participants){ outputView.printResultText(); outputView.printLadder(ladder); - outputView.printResult(ladder.getParticipants()); + outputView.printResult(participants); } } diff --git a/src/main/java/domain/Ladder.java b/src/main/java/domain/Ladder.java index c1f1058..abb785d 100644 --- a/src/main/java/domain/Ladder.java +++ b/src/main/java/domain/Ladder.java @@ -4,21 +4,14 @@ import java.util.List; public class Ladder { - private final List participants; private final List lines; public Ladder(Size ladderSize, Size lineSize) { - this.participants = generateParticipants(lineSize); this.lines = generateLines(ladderSize, lineSize); - getResult(); } - private List generateParticipants(Size lineSize) { - List participants = new ArrayList<>(); - for (int i = 0; i < lineSize.getSize(); i++) { - participants.add(new Participant(i)); - } - return participants; + public Ladder(List lines) { + this.lines = lines; } private List generateLines(Size ladderSize, Size lineSize) { @@ -29,35 +22,36 @@ private List generateLines(Size ladderSize, Size lineSize) { return lines; } - private void getResult(){ + public void getResult(Participants participants){ for (Line line : lines) { - changeByLine(line); + changeByLine(line, participants.getParticipants()); } } - private void changeByLine(Line line){ + private void changeByLine(Line line, List participants){ for(int i = 0; i< line.getPoints().size() ; i++){ - changeByPoint(i,line.getPoints().get(i)); + changeByPoint(i,line.getPoints().get(i), participants); } } - private void changeByPoint(int idx, Point point){ + private void changeByPoint(int idx, Point point, List participants){ if(point.isConnected()){ - swapEnds(idx); + move(idx, participants); } } - private void swapEnds(int idx){ + private void move(int idx, List participants){ int temp = participants.get(idx).getEnd(); - participants.get(idx).setEnd(participants.get(idx+1).getEnd()); - participants.get(idx+1).setEnd(temp); + participants.get(idx).changeEnd(participants.get(idx+1).getEnd()); + participants.get(idx+1).changeEnd(temp); } public List getLines() { return lines; } - public List getParticipants() { - return participants; + public int getWidth() { + return lines.get(0).getPoints().size()+1; } + } diff --git a/src/main/java/domain/Participant.java b/src/main/java/domain/Participant.java index 217707c..ef70a0f 100644 --- a/src/main/java/domain/Participant.java +++ b/src/main/java/domain/Participant.java @@ -17,7 +17,7 @@ public int getEnd() { return end; } - public void setEnd(int end) { + public void changeEnd(int end) { this.end = end; } } diff --git a/src/main/java/domain/Participants.java b/src/main/java/domain/Participants.java new file mode 100644 index 0000000..9e651a4 --- /dev/null +++ b/src/main/java/domain/Participants.java @@ -0,0 +1,15 @@ +package domain; + +import java.util.List; + +public class Participants { + private final List participants; + + public Participants(List participants) { + this.participants = participants; + } + + public List getParticipants() { + return participants; + } +} diff --git a/src/main/java/service/LadderService.java b/src/main/java/service/LadderService.java new file mode 100644 index 0000000..9f6d500 --- /dev/null +++ b/src/main/java/service/LadderService.java @@ -0,0 +1,29 @@ +package service; + +import domain.Ladder; +import domain.Participant; +import domain.Participants; +import domain.Size; +import java.util.ArrayList; +import java.util.List; + +public class LadderService { + + public Ladder createLadder(int height, int width) { + Size heightSize = new Size(height); + Size widthSize = new Size(width); + return new Ladder(heightSize, widthSize); + } + + public Participants createParticipants(int width) { + List participants = new ArrayList<>(); + for(int i = 0 ; i< width; i++){ + participants.add(new Participant(i)); + } + return new Participants(participants); + } + + public void getResult(Ladder ladder, Participants participants) { + ladder.getResult(participants); + } +} diff --git a/src/main/java/view/InputView.java b/src/main/java/view/InputView.java index ef183b5..963088c 100644 --- a/src/main/java/view/InputView.java +++ b/src/main/java/view/InputView.java @@ -1,24 +1,23 @@ package view; -import domain.Size; import java.util.Scanner; public class InputView { private Scanner scanner = new Scanner(System.in); - public Size getLadderWidth() { + public int getLadderWidth() { System.out.println("사다리의 넓이는 몇 개인가요?"); int width = scanner.nextInt(); scanner.nextLine(); System.out.println(); - return new Size(width); + return width; } - public Size getLadderHeight() { + public int getLadderHeight() { System.out.println("사다리의 높이는 몇 개인가요?"); int height = scanner.nextInt(); scanner.nextLine(); System.out.println(); - return new Size(height); + return height; } } diff --git a/src/main/java/view/OutputView.java b/src/main/java/view/OutputView.java index 0763033..f484d50 100644 --- a/src/main/java/view/OutputView.java +++ b/src/main/java/view/OutputView.java @@ -3,6 +3,7 @@ import domain.Ladder; import domain.Line; import domain.Participant; +import domain.Participants; import domain.Point; import java.util.List; @@ -27,8 +28,8 @@ public void printLine(Line line){ System.out.print("|"); } - public void printResult(List participants){ - for(Participant participant : participants){ + public void printResult(Participants participants){ + for(Participant participant : participants.getParticipants()){ System.out.println(participant.getStart() + " -> " + participant.getEnd()); } } diff --git a/src/test/java/domain/LadderTest.java b/src/test/java/domain/LadderTest.java index 85a3660..b6cbec6 100644 --- a/src/test/java/domain/LadderTest.java +++ b/src/test/java/domain/LadderTest.java @@ -2,6 +2,8 @@ import static org.assertj.core.api.Assertions.assertThat; +import java.util.ArrayList; +import java.util.List; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -12,4 +14,23 @@ public void creationTest() { Ladder ladder = new Ladder(new Size(4),new Size(4)); assertThat(ladder.getLines().size()).isEqualTo(4); } + + @DisplayName("사다리 연결되었을 경우, 이웃 참가자 결과 swap 수행") + @Test + public void getResultTest() { + List participantList = new ArrayList(); + for (int i = 0; i < 4; i++) { + participantList.add(new Participant(i)); + } + Participants participants = new Participants(participantList); + List points = List.of(new Point(true), new Point(false), new Point(true)); + Line line = new Line(points); + Ladder ladder = new Ladder(List.of(line)); + ladder.getResult(participants); + + assertThat(participants.getParticipants().get(0).getEnd()).isEqualTo(1); + assertThat(participants.getParticipants().get(1).getEnd()).isEqualTo(0); + assertThat(participants.getParticipants().get(2).getEnd()).isEqualTo(3); + assertThat(participants.getParticipants().get(3).getEnd()).isEqualTo(2); + } }