본문 바로가기
알고리즘['파이썬','JavaScript']/구름

구름톤 챌린지 3주 day11 학습 일기

by kk님 2023. 8. 28.

귀여운 곱슬머리와 샤프 획득!

다이나믹 프로그래밍, Bottom-up 풀이
 
[미숙했던 점] dp 초기화
 
dp = [ 0 for _ in range(N+1)] 배열을 이렇게 초기화 했는데,
아이템의 통증 감소 범위와 통증의 수치 관계를 점검하지 못했다. A<B<N 일 것이라 생각해서. . .
if문이 길어지는것 같아서 인덱스 범위를 체크하지 않고 1부터 A-1까지, A부터 B-1까지, B부터 N까지 나누어 코드를 작성하다 보니 문제가 발생했던 것이었다. . .
 
그래서 dp 배열의 길이를 두가지 생각해봤는데
(1) N의 최대값인 10**6+1
(2) B+1 if B>N else N+1
메모리를 아끼기 위해서 (2)를 선택했다.
왜냐하면 B는 최대값이 13이었을 때라 N이 6 이렇게 되더라도 그 길이 차이가 별로 나지 않을 것 같아서였고
10**6+1은 예시 테스트에서도 확인할 수 있듯이 N의 값이 (상대적으로 매우) 작을 수 있다. 100이라고 하더라도 사용하지 않는 메모리가 더 많기 때문에..(연산은 N까지만 하기 때문)
 
이렇게 하지 않고 if문에 인덱스를 점검하는 조건을 추가해주어도 되지만,
기존 코드를 수정하지 않는 방법을 생각했고
그리고 B의 최대값이 작기 때문에 조건문이 추가되었을 때 코드가 길어지거나, 마찬가지로 가독성 문제로 해당 풀이로 제출했다.
 
함수화 하는 방법도 좋을것 같다.
 
생각보다 인덱스 문제로 런타임 에러가 자주 발생하기 때문에 좀 더 주의를 기울여야겠다 .. 조건을 잘 보자. 
 
오늘의 학습일기 끝!