[programmers] Java Lv.2 - 멀리 뛰기

2025. 1. 8. 10:31·Algorithm Solving/Java

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.

제한 사항
n은 1 이상, 2000 이하인 정수입니다.


입출력 예


입출력 예 설명
입출력 예 #1
위에서 설명한 내용과 같습니다.

입출력 예 #2
(2칸, 1칸)
(1칸, 2칸)
(1칸, 1칸, 1칸)
총 3가지 방법으로 멀리 뛸 수 있습니다.

 

풀이

 

유의사항

1234567를 나눈 나머지를 리턴하는 함수이므로 dp 메서드 안에서 다음과 같이 계산해야한다.

memo[n] = ((dp(n-1)%1234567) + (dp(n-2)%1234567)) % 1234567;

처음에 dp(n) % 1234567 로 제출했다가 틀렸다,,ㅎ

dp(n-1)과 dp(n-2)에 대해서도 1234567로 나눈 나머지 값을 저장해야하기 때문에, dp 메서드 안에서 계산해줘야한다.

 

n=3인 경우에도 return 3이 되도록 if문을 작성했었는데,

dp(3) = dp(2) + dp(1) 이므로 3에 대한 종료조건은 필요하지 않아 삭제했다.

((근데 제출은 if (n==3) 조건도 포함해서 해버렸다,,🥲))

 

import java.io.*;

public class Main {
    public static long[] memo;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        memo = new long[n+1];
        System.out.println(dp(n));

    }
    public static long dp(int n) {
        if (memo[n] != 0) {
            System.out.print("이미 계산된 n=" + n + "\t");
            System.out.println("memo["+ n +"]=" + memo[n]);
            return memo[n];
        }

        if (n == 1) {
            memo[n] = 1;
            System.out.println("n=" + n + "\tmemo["+ n +"]=" + memo[n]);
            return memo[n];
        }
        if (n == 2) {
            memo[n] = 2;
            System.out.println("n=" + n + "\tmemo["+ n +"]=" + memo[n]);
            return memo[n];
        }

        System.out.println("memo[" + n + "] = dp(" + n + "-1) + dp(" + n + "-2)");
        memo[n] = ((dp(n-1)%1234567) + (dp(n-2)%1234567)) % 1234567;
        System.out.print("memo[" + n + "] = dp(" + (n-1) + ") + dp(" + (n-2) + ") = ");
        System.out.println(memo[n-1] + " + " + memo[n-2] + " = " + memo[n]);
        return memo[n];
    }
}

 

제출

class Solution {
    public static long[] memo;
    public long solution(int n) {
        long answer = 0;
        memo = new long[n+1];
        answer = dp(n);
        return answer;
    }
    public static long dp(int n) {
        if (memo[n] != 0) {
            return memo[n];
        }

        if (n == 1) {
            memo[n] = 1;
            return memo[n];
        }
        if (n == 2) {
            memo[n] = 2;
            return memo[n];
        }
        
        memo[n] = ((dp(n-1)%1234567) + (dp(n-2)%1234567)) % 1234567;
        return memo[n];
    }
}

 

저작자표시 비영리 변경금지 (새창열림)

'Algorithm Solving > Java' 카테고리의 다른 글

[programmers] Java Lv.2 - 괄호 회전하기  (1) 2025.01.10
[programmers] Java Lv.2 - 귤 고르기  (3) 2025.01.09
[programmers] Java Lv.2 - N개의 최소공배수  (2) 2025.01.07
[programmers] Java Lv.2 - 예상 대진표  (0) 2025.01.06
[programmers] Java Lv.2 - 카펫  (0) 2025.01.03
'Algorithm Solving/Java' 카테고리의 다른 글
  • [programmers] Java Lv.2 - 괄호 회전하기
  • [programmers] Java Lv.2 - 귤 고르기
  • [programmers] Java Lv.2 - N개의 최소공배수
  • [programmers] Java Lv.2 - 예상 대진표
기만나🐸
기만나🐸
공부한 내용을 기록합시다 🔥🔥🔥
  • 기만나🐸
    기만나의 공부 기록 🤓
    기만나🐸
  • 전체
    오늘
    어제
    • ALL (147)
      • TIL (Today I Learned) (56)
      • Dev Projects (15)
      • Algorithm Solving (67)
        • Java (52)
        • SQL (15)
      • Certifications (8)
        • 정보처리기사 실기 (8)
  • 인기 글

  • 태그

    dp
    join
    Google Fonts
    자료구조
    DFS
    jwt
    그리디
    GROUP BY
    CSS
    websocket
    백트래킹
    Subquery
    programmers
    javascript
    sql
    백준
    jpa
    Firebase
    BFS
    완전탐색
    mysql
    프로그래머스
    bootstrap
    greedy
    HTML
    jQuery
    java
    다이나믹프로그래밍
    시뮬레이션
    BOJ
  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기만나🐸
[programmers] Java Lv.2 - 멀리 뛰기
상단으로

티스토리툴바