TIL 2022-02-16 수

그린·2022년 2월 16일
0

TIL

목록 보기
11/47

1. 오늘 학습한 내용

백준 동적프로그래밍 문제 2193번
사용 언어 : 자바
내가 푼 코드 : https://github.com/MinYeongPark/Coding/blob/main/baekjoon/n2193/Main.java

2. 알게 된 내용

  1. int형만 고집하지 말자
    처음에는 메모이제이션할 배열의 데이터 타입을 int형으로 잡았었는데, 다른 분들의 코드를 살펴보다보니 입력값이 커지면 결과값이 너무 커져서 int 범위를 벗어나기 때문에 long형으로 하시는 경우가 있었다. 막혔을 때 long형으로 바꿔보는 작업도 시도해보자!

참고한 출처 : https://www.acmicpc.net/board/view/12447

  1. 모든 케이스에 대해 정확히 생각하자
    입력값의 범위는 1 <= N <= 90이라고 문제에서 주어졌었는데, 문제를 풀 때는 정작 1을 입력할 때에 대해서는 고려하지 않았었다. 그냥 dp[2]값을 넣어도 될 것이라 생각했었다.

따라서 백준에서도 위의 사진처럼 런타임 에러 (ArrayIndexOutOfBounds) 가 떴었는데, 다른 분의 코드를 참고해보니까 dp[0]과 dp[1]의 값을 지정해주는 것을 볼 수 있었다. 입력값이 1인 경우에는 배열의 크기가 2로, 0번 인덱스와 1번 인덱스만 존재하게 되는데 나는 이를 고려하지 않고 dp[2] 값을 초기화하고 있어서 런타임 에러가 뜬 것이였다.. 지금 보니까 dp[0] 값은 알아서 0으로 초기화되기 때문에 dp[1] 값만 초기화해주면 될 것 같다. 아무튼 모든 케이스에 대해서 꼼꼼히 확인하는 자세를 길러야겠다.

참고한 출처 : https://odysseyj.tistory.com/25

3. 느낀 점

오늘 풀면서 점화식도 꽤 빨리 쉽게 찾아서 기분이 좋았는데 계속 막혀서 어느 점이 문제일지 몰랐었다. 하지만 여러 선배님들의 글을 찾아보면서 내 코드의 미흡한 점을 깨닫게 되고 결국 정답으로 되어서 정말 뿌듯하다.
1을 입력할 때를 고려하지 않았다는 것이 조금 충격적이였는데,앞으로 여러 케이스를 직접 넣어보면서 꼼꼼히 확인해야겠다.

profile
기록하자

0개의 댓글