이번에도 시간복잡도 문제입니다.
입력값에 따라 실행횟수가 달라지며, for문이 두번 들어갔기 때문에 n의2제곱 번 실행됩니다.
그러므로 시간복잡도는 O(n2) 이 됩니다! 하지만 여기서 주의해야할것은 int형의 범위입니다.
여기서 입력받는 n의 범위는 1 이상 500,000입니다 저희는 입력받은 n을 2제곱 해야합니다.
최대값인 500,000을 2제곱하면?? 이런... 25억이 나오네요 범위를 초과했습니다.
때문에 저희는 long형태로 값을 받아야합니다. 이때 사용한것이 Math 클래스입니다.
Java 언어는 수학 함수 및 연산을 위한 포괄적인 라이브러리를 갖추고 있습니다. "Math" 클래스라고 하며 java.lang 패키지 에 있습니다 . 수학 라이브러리에는 기본 수치 연산, 삼각법, 최소-최대 찾기, 난수 생성 및 로그 연산을 위한 방법이 포함되어 있습니다. 이 Math 클래스에서 저는 숫자의 거듭제곱을 계산하는 데 사용되는 Math.pow() 메서드를 사용했습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
long count = (long) Math.pow(N, 2); // n의 2제곱 -> O(n2) 시간복잡도를 가진다
System.out.println(count);
System.out.println(2);
}
}