문제 url:
알고리즘 수업 - 알고리즘의 수행 시간 3
문제:
이번 문제는 for문이 2개인 2중 반복문으로 시간 복잡도는 n번만큼 반복하면서 그 안에서도 n번만큼 반복하기 때문에
O(N ^ 2)의 시간 복잡도를 가진다.
해당 문제를 이전문제와 같이 간단하게 풀 수 있다.
라고 해서 2번 틀렸는데, 왜 정답 비율이 51퍼나 됐는지 아차했다..
import java.io.*;
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());
System.out.println((long)Math.pow(N,2));
System.out.println(2);
}
}
어려운 것 없이 Math.pow를 통해 제곱값을 구했으며,
문제에서 n은 최대 500,000까지 가진다고 한다. 이를 제곱하게 되면 250,000,000,000으로 2천500억이다.
하지만! 이를 int형으로 받게 되면(int형은 대략 21억 4천....
찾아보니 -2,147,483,648 ~ 2,147,483,647 이렇다..)
그렇다 int형은 21억개 받게 데이터를 표현하지 못한다. 그래서 long으로 출력해야 답이 맞을 것이다.
또한 pow()메서드는 반환 타입이 double로 즉 실수형 타입을 반환하기 때문에 정수형으로 나타낼 때는 저렇게 ()
소괄호 안에 정수형 타입으로 형변환을 해주고 출력해야 한다.
pow() 메서드에 대해 궁금하다면
pow() <-해당 링크에서 확인
pow() 메서드도 그렇고, int형도 그렇고 한번씩 경험해봤던 에러였다. 그래서 틀렸어도 빠르게 문제를 고칠 수 있었지만, 문제를 제대로 읽고 바로 풀 수 있도록 연습을 많이 해야겠다.