Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions src/main/java/Figure/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package Figure;

public interface Calculator {

double calculate();

}
22 changes: 22 additions & 0 deletions src/main/java/Figure/Line.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package Figure;

import domain.Point;
import domain.Points;

public class Line implements Calculator {

private Points points;

public Line(Points points) {
this.points = points;
}

@Override
public double calculate() {

Point point1 = points.getPoint(0);
Point point2 = points.getPoint(1);

return point1.getDifferDistance(point2);
}
}
34 changes: 34 additions & 0 deletions src/main/java/Figure/Square.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package Figure;

import domain.Point;
import domain.Points;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Square implements Calculator {

private Points points;

public Square(Points points) {
this.points = points;
}

@Override
public double calculate() {

Point stand = points.getPoint(0);

List<Double> lens = new ArrayList<>();

for(int i=1; i<4; i++) {
lens.add(stand.getDifferDistance(points.getPoint(i)));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이경우 직선만이 아닌 대각선의 길이도 구해야 하는데, 직선만 구해서 계산하는 방법은 어떤 것이 있을까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵,, 특정 한 점으로부터 나머지 세 점까지의 거리(getDifferDistance)를 구했습니다. 3개 중 가장 큰것이 대각선의 길이라서 나머지 두개만을 사용을 해봤는데 ㅎㅎ

이런식으로 계산하지않고 다른 방식이 있는지 고민해보겠습니다.

}

Collections.sort(lens);

return lens.get(0)*lens.get(1);
}

}
35 changes: 35 additions & 0 deletions src/main/java/Figure/Triangle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package Figure;

import domain.Point;
import domain.Points;

public class Triangle implements Calculator {

private Points points;

public Triangle(Points points) {
this.points = points;
}

@Override
public double calculate() {

Point pointA = points.getPoint(0);
Point pointB = points.getPoint(1);
Point pointC = points.getPoint(2);

double area = 0.5 * (
this.getTriangleLine(pointA, pointB, pointC) +
this.getTriangleLine(pointB, pointC, pointA) +
this.getTriangleLine(pointC, pointA, pointB)
);

return Math.abs(area);

}

private int getTriangleLine(Point pointA, Point pointB, Point pointC) {
return pointA.getX() * (pointB.getY() - pointC.getY());
}

}
10 changes: 10 additions & 0 deletions src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import coordinate.Process;

public class Main {

public static void main(String[] args) {
Process process = new Process();
process.run();
}

}
37 changes: 37 additions & 0 deletions src/main/java/coordinate/Process.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package coordinate;

import Figure.Line;
import Figure.Square;
import Figure.Triangle;
import domain.Points;
import domain.Type;
import view.InputView;
import view.OutputView;

public class Process {

OutputView oView = new OutputView();
InputView inputView = new InputView();

public void run() {

oView.msgInputPoints();

Points points = Points.newInstance(inputView.inputPoints());

if(points.getSize()== Type.LINE.getCount()) {

oView.msgOutputLine(new Line(points).calculate());

} else if(points.getSize()==Type.TRIANGLE.getCount()) {

oView.msgOutputTriangle(new Triangle(points).calculate());

} else if(points.getSize()==Type.RECTANGLE.getCount()) {

oView.msgOutputSquare(new Square(points).calculate());

}
}

}
52 changes: 52 additions & 0 deletions src/main/java/domain/Point.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package domain;

import utils.Constants;

public class Point {

private int x;
private int y;

private Point(int x, int y) {

this.x = x;
this.y = y;

}

public static Point newInstance(int x, int y) {

if (x < 0 || x > 24 || y < 0 || y > 24) {
throw new IllegalArgumentException(Constants.INPUT_RANGE_CHECK);
}

return new Point(x, y);
}

public static Point inputStrSeparator(String inStr) {

String[] values = inStr.replaceAll("[()]", "").split(",");

return newInstance(Integer.parseInt(values[0]), Integer.parseInt(values[1]));

}

public double getDifferDistance(Point point) {

return Math.sqrt(Math.pow(x - point.getX(), 2) + Math.pow(x - point.getY(), 2));

}

public int getX() {

return this.x;

}

public int getY() {

return this.y;

}

}
24 changes: 24 additions & 0 deletions src/main/java/domain/Points.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package domain;

import java.util.List;

public class Points {

private List<Point> points;

private Points(List<Point> points) {
this.points = points;
}

public static Points newInstance(List<Point> points) {
return new Points(points);
}

public Point getPoint(int idx) {
return points.get(idx);
}

public int getSize() {
return points.size();
}
}
19 changes: 19 additions & 0 deletions src/main/java/domain/Type.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package domain;

public enum Type {

LINE(2),
TRIANGLE(3),
RECTANGLE(4);

private final int count;

Type(int count) {
this.count = count;
}

public int getCount() {
return count;
}

}
9 changes: 9 additions & 0 deletions src/main/java/utils/Constants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package utils;

public class Constants {

public static String INPUT_FORMAT_CHECK = "입력 좌표의 포맷을 확인";

public static String INPUT_RANGE_CHECK = "좌표(x,y)는 모두 최소0 부터 최대 24까지만 허용";

}
63 changes: 63 additions & 0 deletions src/main/java/view/InputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package view;

import domain.Point;
import domain.Type;
import utils.Constants;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class InputView {

public List<Point> inputPoints() {

List<Point> points = new ArrayList<>();

try {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();

InputView.validInputFormat(line);

String[] pointsStr = line.split("-");

for(int i=0; i< pointsStr.length; i++) {

points.add(Point.inputStrSeparator(pointsStr[i]));

}

} catch (IOException e) {
System.out.println(e.getMessage());
}

return points;
}

public static void validInputFormat(String inStr) {

String[] strArr = inStr.split("-");

if(strArr.length != Type.LINE.getCount() && strArr.length != Type.LINE.getCount() && strArr.length != Type.LINE.getCount()) {
throw new IllegalArgumentException(Constants.INPUT_FORMAT_CHECK);
}

for(String str:strArr) {
String[] checkArr = str.replaceAll("[()]", "").split(",");

if(checkArr.length!=2) throw new IllegalArgumentException(Constants.INPUT_FORMAT_CHECK);

try {
Integer.parseInt(checkArr[0]);
Integer.parseInt(checkArr[1]);
} catch (NumberFormatException e) {
throw new IllegalArgumentException(Constants.INPUT_FORMAT_CHECK);
}
}

}
}
21 changes: 21 additions & 0 deletions src/main/java/view/OutputView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package view;

public class OutputView {

public void msgInputPoints() {
System.out.println("좌표를 입력하세요.");
}

public void msgOutputLine(double result) {
System.out.println("두 점 사이의 거리는 "+result);
}

public void msgOutputSquare(double result) {
System.out.println("사각형 넓이는 "+result);
}

public void msgOutputTriangle(double result) {
System.out.println("삼각형 넓이는 "+result);
}

}
Loading