CodeWars 열 네 번째 문제
Updated:
Perimeter of squares in a rectangle
import java.math.BigInteger;
public class SumFct {
public static BigInteger perimeter(BigInteger n) {
BigInteger first = BigInteger.ONE;
BigInteger second = BigInteger.ONE;
BigInteger sum = first.add(second);
for(BigInteger i = BigInteger.ONE; n.compareTo(i) == 1; i=i.add(BigInteger.ONE)) {
BigInteger temp = first;
first = second;
second = temp.add(second);
sum = sum.add(second);
}
return sum.multiply(BigInteger.valueOf(4));
}
}
*문제 알고리즘은 최근에 풀었던 피보나치 알고리즘과 같았기 때문에 어렵지 않았다.
*하지만 BigInteger라는 새로운(?) 클래스를 처음 접했기 때문에 살짝 당황했지만 구글링을 통해서 극복했다.
어려운 내용은 아니기 때문에 java 개념에 정리할까 하다가 어려운 개념은 아니라서 이번 포스팅에다가 정리하려고한다.
BigInteger
*범위는 무한대이다.
*클래스 변수는 자바 12 기준 4개가 있다.
BigInteger.ZERO //0
BigInteger.ONE //1
BigInteger.TWO //2
BigInteger.TEN //3
*메소드는 엄청 많은데 주요 메소드는 다음과 같다. 이외는 그때 그때 구글링하면 될 것 같다.
public void UseBigInteger() {
int i = 5;
BigInteger bigNum1 = BigInteger.ZERO; // 0
BigInteger bigNum2 = BigInteger.ONE; // 1
BigInteger bigNum3 = BigInteger.TEN; // 10
BigInteger afterBigNum;
// 사칙연산
afterBigNum = bigNum1.add(bigNum3); // 더하기
afterBigNum = bigNum3.subtract(bigNum2); // 빼기
afterBigNum = bigNum2.multiply(bigNum3); // 곱하기
afterBigNum = bigNum3.divide(bigNum2); // 나누기
// 변수와 사칙연산
afterBigNum = bigNum1.add(BigInteger.valueOf(i)); // 더하기
afterBigNum = bigNum1.subtract(BigInteger.valueOf(i)); // 빼기
afterBigNum = bigNum1.multiply(BigInteger.valueOf(i)); // 곱하기
afterBigNum = bigNum1.divide(BigInteger.valueOf(i)); // 나누기
if (bigNum1.compareTo(bigNum1) == 0) // 비교
System.out.println("동일합니다.");
else if (bigNum1.compareTo(bigNum2) == -1)
System.out.println("파라미터보다 작은 수입니다.");
else if (bigNum2.compareTo(bigNum1) == 1)
System.out.println("파라미터보다 큰 수입니다.");
}