파이썬에 너무 익숙해져 있다보니 배열 선언부에서부터 막혔다.
파이썬의 List만 써왔어서 자바에서도 ArrayList를 이용하려고 했지만 그럴 필요도 없는 문제여서 그냥 배열을 이용해서 풀었다.
int n = sc.nextInt();
int dp[] = new int[n+1];
배열의 선언부도 익숙치 않아서 시간이 조금 걸렸다.
심지어 이렇게 풀었는데 오답이 나와서 당황했는데, 1 입력 등의 입력 예외도 처리해 주었는데 왜 틀렸나 하고 고민을 상당히 오래했었다.
이마저도 파이썬 때문이다...
👉배열의 자료형을 int
로 선언해서 90입력 시 정상적인 출력이 나오지 않았던 것.
파이썬은 integer의 범위가 정해져 있지 않아서 그냥 형 변환만 잘 해주면 됐는데, 자바는 그렇지 않았다.
int를 long 으로 바꾸어서 정답을 맞췄다.
import java.io.IOException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = sc.nextInt();
long dp[] = new long[n+1];
dp[0] = 0;
dp[1] = 1;
if (n == 1) {
System.out.println(1);
return;
}
for (int i = 2; i <= n; i++) {
dp[i] = dp[i-2] + dp[i-1];
}
System.out.println(dp[n]);
}
}
long
은 primitive type 이다.
Long
은 reference type 이다.
primitive type은 실제 메모리에 값을 저장하는 역할을 한다.
👉null 할당이 불가능하지만, Stack 영역에 값이 존재하기 때문에 메모리 관리 등 성능 측면에서 효율적이다.
reference type은 메모리 주소를 통해 객체
를 참조한다.
👉null 할당이 가능하고, Stack 영역에는 참조 주소만 있고, 실제 데이터는 Heap 영역에 있기 때문에 primitive type에 비하면 덜 효율적이다.
스프링 프레임워크 등 웹을 공부할 때,
Long id;
String Name;
등으로 선언하는 경우가 많았는데, DB의 id 값이 not null이 보장되지 않아서 이렇게 선언을 하는 것이었다!