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("파라미터보다 큰 수입니다.");

}