[프로그래머스] 멀리 뛰기 - python

2022. 6. 6. 17:43·알고리즘 공부/다이나믹 프로그래밍

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

 

코딩테스트 연습 - 멀리 뛰기

효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2

programmers.co.kr

나는 문제 보자마자... 백트레킹이다 하고 접근했는데.... 이게 다이나믹 이었다... 하하

오랜만에 푸는 문제라 감각이 많이 떨어졌다. 하하

 

다시 하루 생각해봤는데 전형적인 메모제이션이다!

dp의 유형은 문제를 잘게 조깨는게 중요하다.

아래의 문제를 잘 해석해보자 중요한 부분은 

def solution(n):
    answer = 0
    if n<3:
        return n
    memo = [0] * (n+1)
    memo[1] = 1
    memo[2] = 2
    for i in range(3,n+1):
        memo[i] = memo[i-1] + memo[i-2]
    answer = memo[n]%1234567
    
    return answer

이 부분이다.

 memo[1] = 1
 memo[2] = 2
    for i in range(3,n+1):
        memo[i] = memo[i-1] + memo[i-2]

우리는 점프를 1칸 2칸 할수 있다. 왜 두개를 더하면 다음꺼의 가지수에 포함되는지를 알아보자.

그 이유는

1칸 전의 경우의 수는 이제 마지막 1칸만 뛰면 도착이므로 그 전까지의 경우를 고려한 것이도

2칸 전의 경우의 수는 이제 마지막 2칸만 뛰면 도착지에 도착하는 경우의 수를 고려한 것이다.

이렇게 하면 쉽게 이해가 가능하다

 

예를 들어보면

memo[1] = 1 1칸 뛰는 경우 1개 ,  memo[2] = 2 는 1칸 2번 뛰는 경우, 2칸 한번에 뛰는 경우라 2가지이며,

 

memo[3] = memo[1] + memo[2]  인 이유는 memo[1] 까지 뛰는 경우에 이제 1칸 남은 거에 memo[2]까지의 경우에 2칸 만 뛰면 되는 경우를 더해서 나온 것이다.

이걸로 해설 끝!

반응형

'알고리즘 공부 > 다이나믹 프로그래밍' 카테고리의 다른 글

[백준] 11727번 2×n 타일링 2 - 파이썬  (0) 2022.05.02
[백준] 9095번 1, 2, 3 더하기 - 파이썬  (0) 2022.05.02
[백준] 12865번 평범한 배낭- 파이썬  (0) 2022.02.26
[백준] 1912번 연속합- 파이썬  (0) 2021.08.09
[백준] 9251번 LCS - 파이썬  (0) 2021.08.09
'알고리즘 공부/다이나믹 프로그래밍' 카테고리의 다른 글
  • [백준] 11727번 2×n 타일링 2 - 파이썬
  • [백준] 9095번 1, 2, 3 더하기 - 파이썬
  • [백준] 12865번 평범한 배낭- 파이썬
  • [백준] 1912번 연속합- 파이썬
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코딩기초스킬
    BFS
    선택정렬
    큐
    if문
    자료구조
    소수찾기
    백준
    DFS
    캘리브레이션
    코딩
    코딩기초
    n진법 변환
    코딩문제
    정렬
    왜곡보정
    스택
    프로그래머스
    에라토슽네스의 체
    다이나믹 프로그래밍
    인접리스트
    코딩테스트
    그리디
    C언어 기초
    순차 탐색
    인접행렬
    삽입 정렬
    이미지처리
    c언어
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
[프로그래머스] 멀리 뛰기 - python
상단으로

티스토리툴바