package src;
/**
* MyMath 클래스 구현하기
* 인스턴스를 생성할 수 없는 MyMath 클래스를 구현하시오.
*
* MyMath 클래스는 다음 정적 변수를 가진다.
* PI = 3.1415927;
* E = 2.718281;
*
* MyMath 클래스는 다음 정적 메소드를 가진다.
* min - 정수 또는 실수를 여러개 입력받아 최소값을 구한다.
* max - 정수 또는 실수를 여러개 입력받아 최대값을 구한다.
* abs - 정수 또는 실수를 입력받아 절대값을 구한다.
* floor - 실수를 입력받아 내림 연산한 정수를 출력한다.
* ceil - 실수를 입력받아 올림 연산한 정수를 출력한다.
*/
public class MyMath {
public static double PI = 3.1415927;
public static double E = 2.718281;
private MyMath(){}
//min()
static public int min(int... params) {
int minVal=0;
for(int i : params){
minVal = i < minVal ? i : minVal;
}
return minVal;
}
static public double min(double... params) {
double minVal=0;
for(double i : params){
minVal = i < minVal ? i : minVal;
}
return minVal;
}
//max()
static public int max(int... params) {
int maxVal=0;
for(int i : params){
maxVal = i > maxVal ? i : maxVal;
}
return maxVal;
}
static public double max(double... params) {
double maxVal=0;
for(double i : params){
maxVal = i > maxVal ? i : maxVal;
}
return maxVal;
}
//abs()
static public int abs(int i){
return i >0? i : -i;
}
static public double abs(double d){
return d>0? d: -d;
}
//floor
static public double floor(double d){
return d>= 0 ? d-( d % 1) : d - ( 1 + d % 1);
}
//ceil
static public double ceil(double d){
return d > 0 ? d + ( 1 -(d % 1)) : d - (d % 1);
}
}
class MyMathTest {
public static void main(String[] args) {
// MyMath m = new MyMath(); // 인스턴스 생성 불가
System.out.println(MyMath.PI);
System.out.println(MyMath.E);
System.out.println(MyMath.min(2, 3, -4, 6, 3.0, 4.2, 7.3, -1.1, -4.2));
System.out.println(MyMath.max(7, 0, 6, 16, -4, 3.0, 9.0, 21.0));
System.out.println(MyMath.abs(4));
System.out.println(MyMath.abs(-2.3));
System.out.println(MyMath.floor(0));
System.out.println(MyMath.ceil(-3.12312245));
}
}
풀면서 배운점
package src;
/**
* 싱글톤 패턴 구현하기
*
* 단 하나의 인스턴스만 존재할 수 있는 클래스 SingletonPattern을 구현하시오.
*
* 생성자를 외부에서 직접 호출할 수 없다.
* 정적 메소드인 getInstance() 메소드를 이용해 객체를 받아온다.
* 받아온 객체는 항상 같은 객체를 참조해야 한다.
*/
public class SingletonPattern {
private final static SingletonPattern instance = new SingletonPattern();
private SingletonPattern(){}
public static SingletonPattern getInstance(){
return instance;
}
}
class SingletonPatternTest {
public static void main(String[] args) {
// SingletonPattern instance = new SingletonPattern(); // should fail
SingletonPattern instanceOne = SingletonPattern.getInstance();
SingletonPattern instanceTwo = SingletonPattern.getInstance();
System.out.println(instanceOne == instanceTwo);
}
}
package src;
/**
* 3차원 벡터 클래스 구현하기
*
* 3차원 벡터를 클래스로 구현하시오.
*
* 속성
* float타입의 x, y, z
*
* 생성자
* Vector3D(float x, float y, float z)
*
* 메소드
* - x, y, z에 대한 getter 및 setter
* - add(): 벡터끼리의 덧셈, 실수와의 덧셈을 반환
* - sub(): 벡터끼리의 뺄셈, 실수와의 뺄셈을 반환
* - inner(): 두 벡터의 내적을 반환
* - mul(): 실수와의 곱을 반환
* - mag(): 벡터의 크기를 반환
* - print(): 벡터의 내용을 "(%.3f, %.3f, %.3f)\n" 형식으로 콘솔에 출력
*/
public class Vector3D {
float x;
float y;
float z;
public Vector3D (float x, float y, float z){
this.x = x;
this.y = y;
this.z = z;
}
public void print(){
System.out.printf("(%.3f, %.3f, %.3f)\n",x,y,z);
}
public Vector3D add(Vector3D v){
return new Vector3D(this.x + v.x,
this.y + v.y,
this.z + v.z);
}
public Vector3D add(float f){
return new Vector3D(this.x + f,
this.y + f,
this.z + f);
}
public Vector3D sub(Vector3D v){
return new Vector3D(this.x - v.x,
this.y - v.y,
this.z - v.z);
}
public Vector3D sub(float f){
return new Vector3D(this.x - f,
this.y - f,
this.z - f);
}
public float inner(Vector3D v){
return (this.x * v.x) + (this.y * v.y) + (this.z * v.z);
}
public Vector3D mult(float f){
return new Vector3D(this.x * f,
this.y * f,
this.z * f);
}
public float mag(){
return (float)Math.sqrt((Math.pow(this.x,2) + Math.pow(this.y,2)
+ Math.pow(this.z,2)));
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public float getZ() {
return z;
}
public void setZ(float z) {
this.z = z;
}
}
class Vector3DTest {
public static void main(String[] args) {
Vector3D v1 = new Vector3D(0.5f, 0.2f, 0.9f);
Vector3D v2 = new Vector3D(0.8f, 0.1f, 1.3f);
v1.add(v2).print();
v2.sub(v1).print();
v1.add(0.2f).print();
v2.sub(0.05f).print();
System.out.println(v1.inner(v2));
v1.mult(1.2f).print();
System.out.println(v2.mag());
}
}