🧮 [프로그래머스] 멀리 뛰기 (Java) - DP 문제

2023. 9. 26. 20:36· 코딩테스트/🧮 프로그래머스
문제

https://school.programmers.co.kr/learn/courses/30/lessons/12914

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 이해 & 풀이

문제를 이해하는 것은 아마 굉장히 편할 것이다 라고 생각한다.

 

하지만 풀이가 매우 중요한데 여기서 가장 눈여겨 보아야 할 것은 피보나치 수열을 사용할 수 있다는 것이다.

 

처음에 문제를 만나면 각각의 칸수를 계산하고 계산한 칸수를 저장하고 이런식으로 생각하기 마련이다. 

하지만 우리에게 중요한 것은 경우의 수가 무엇이냐가 아닌 경우의 수의 갯수이다

 

이를 알고 천천히 문제를 다시 보면 

1칸일 경우 => (1칸) - 1개
2칸일 경우 => (1칸, 1칸), (2칸) - 2개
3칸일 경우 => (1칸, 1칸, 1칸), (1칸, 2칸), (2칸, 1칸) - 3개
4칸일 경우 => (1칸, 1칸, 1칸, 1칸), (1칸, 2칸, 1칸), (1칸, 1칸, 2칸), (2칸, 1칸, 1칸), (2칸, 2칸) - 5개

1개, 2개, 3개, 5개 이런식으로 증가하는 것을 볼수 있다. 그렇다면 자연스럽게 5칸일 경우 8개가 될 것이다 라고 예측해볼 수 있다.

 

그럼 우린 피보나치 식(fibo(n-1) + fibo(n - 2))을 사용할 수 있겠다. 라고 생각이 들 수 있다. 하지만 중요한 것은 조건이다.

피보나치 수열은 O(2^N)의 시간 복잡도를 가지고 있다. 그럼 2000이면 2^2000인데 이는 너무 오래 걸린다. 그래서 우리는 DP를 사용할 것이다.

 

https://latewalk.tistory.com/171

 

동적 계획법 (DP, Dynamic Programming)

동적 계획법(DP, Dynamic Programming) 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 부분 문제 반복과 최적 부분 구조를 가지는 알고리즘을 일반적인 방법에 비해 더욱 적은 시

latewalk.tistory.com

 

DP는 이미 계산했던 연산에 대해서 바로 불러낼수 있는 아주 큰 장점으로 인해 시간 복잡도가 굉장히 줄어드는 효과적인 연산방법을 사용할 수 있다.

 

소스 코드

주의할점은 배열의 크기에 + 1을 해주어야 한다는 것이다. 왜냐하면 우리는 index0에 데이터를 0을 넣어야한다. 그래야 몇번째 숫자에 원하는 연산 결과가 들어가기 때문이다. 또한 1일 경우의 답도 바로 줄 수 있게 만들어주어야 한다.

'코딩테스트 > 🧮 프로그래머스' 카테고리의 다른 글

🧮 [프로그래머스] 귤 고르기 (Java) - getOrDefault, Comparator  (0) 2023.10.17
🧮 [프로그래머스] N개의 최소 공배수 (Java) ft.유클리드 호재법  (0) 2023.09.26
🧮 [프로그래머스] 이진 변환 반복하기 (JAVA)  (0) 2023.09.21
🧮 [프로그래머스] 폰켓몬 (JAVA)  (0) 2023.08.14
🧮 [프로그래머스] 푸드파이트 대회(JAVA)  (0) 2023.08.12
'코딩테스트/🧮 프로그래머스' 카테고리의 다른 글
  • 🧮 [프로그래머스] 귤 고르기 (Java) - getOrDefault, Comparator
  • 🧮 [프로그래머스] N개의 최소 공배수 (Java) ft.유클리드 호재법
  • 🧮 [프로그래머스] 이진 변환 반복하기 (JAVA)
  • 🧮 [프로그래머스] 폰켓몬 (JAVA)
늦은산책
늦은산책
늦은산책
중얼중얼블로그
늦은산책
전체
오늘
어제
  • 분류 전체보기
    • 오류 모음집
    • CS
      • 💾 자료구조
      • 👫🏼 정렬
      • 🖥 네트워크
      • 💻 운영체제
      • 💾 DB
      • 🌌 알고리즘
      • 📝 언어
    • 테스트
    • Git 초보에게 필요한 Git bash사용법
    • 프로젝트
      • 팀 프로젝트
      • 개인 프로젝트
      • 항해99 개인 프로젝트
      • 스위프 프로젝트(Lit Map)
    • Java
      • 객체 지향
    • Spring
      • 🌲 Spring
      • 👨‍💻 SpringSecurity
      • 🌵 JPA
    • MSA
      • MSA 강좌 - 이도원 강사님
    • Docker(도커)
    • 코딩테스트
      • 🧮 프로그래머스
      • 🎲 백준
    • 항해99
      • 🕛 1주차
      • 🕐 2주차
      • 🕑 3주차
      • 🕒 4주차
    • AWS
    • CI와CD

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 개발자포토폴리오
  • 개발자포트폴리오
  • 항해99
  • 취리코
  • 개발자취준
  • 개발자이력서
  • 코딩테스트
  • 개발자취업
  • 취업리부트코스
  • 카우치코딩_포트폴리오_멘토링
  • 카우치코딩
  • 카우치코딩_팀프로젝트
  • couchcoding

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
늦은산책
🧮 [프로그래머스] 멀리 뛰기 (Java) - DP 문제
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.