public class Solution {
	
	// 멀리 뛰기
	// 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다.
	// 칸의 수 n이 주어질 때 끝에 도달하는 방법이 몇 가지인지 알아내, 1234567로 나눈 나머지를 리턴하는 함수 solution을 완성하세요
	
	static int[] dpArr = {};
	
	// solve 함수는 solve(n) == solve(n - 1) + solve(n - 2) 조건을 만족한다.
	// 구하고자 하는 값이 solve(n) % 1234567 이고
	// (A + B) % C => ((A % C) + (B % C)) % C 이므로
	// (solve(n - 1) + solve(n - 2)) % 1234567 => ((solve(n - 1) % 1234567) + (solve(n - 2) % 1234567)) % 1234567 을 구하면 된다.
	
	public static int solve(int n) {
		
		if (n == 1 || n == 2) { // solve(1) == 1, solve(2) == 2
			return n;
		}
		
		if (dpArr[n] != 0) {
			return dpArr[n];
		}
		
		dpArr[n] = (solve(n - 1) % 1234567) + (solve(n - 2) % 1234567);
		
		return dpArr[n];
	}
	
	public static long solution(int n) {
		long answer = 0;
		
		dpArr = new int[2001]; // n은 1 이상, 2000 이하인 정수
		
		answer = (solve(n) % 1234567);
		
		return answer;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(solution(4)); // 5
	}
}

 

(A + B) % C => ((A % C) + (B % C)) % C

 

프로그래머스 멀리 뛰기 문제 풀이 Java

+ Recent posts