본문 바로가기

프로그래밍 언어/Java

[Java] 계단오르기 프로그램

한 번에 최대 3칸 이동이 가능하며, 앞 3칸까지 비교를 통해 최단 거리를 계산하는 프로그램 (각 계단마다 값 입력)



<입력>


계단의 개수

각 계단마다 값 (계단 개수만큼 입력)



<출력>


[계단 번호] 해당 계단 값   누적 값




<코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import java.util.Scanner;
 
public class StairDemo {
    int[] stepCost;
    static Step[] stepArr;
    
    public static void main(String[] args) {
        StairDemo st = new StairDemo();
        st.doit();
    }
    void doit() {
        Scanner scan = new Scanner(System.in);
        int num = 0;
        num = scan.nextInt();
        stepArr = new Step[num];
        input(scan, num);
        for (int i = 0; i < num; i++) {
            stepArr[i] = new Step(i, stepCost[i]);
            stepArr[i].compute();
        }
        stepArr[num-1].print();
    }
    void input(Scanner scan, int N) {
        stepCost = new int[N];
        for (int i = 0; i < N; i++
            stepCost[i] = scan.nextInt();
    }
    void iniBase() {
        for (int i = 0; i < 3; i++
            stepArr[i].minToHere = stepCost[i];
    }
}
class Step {
    int number;
    int cost;
    int minToHere;
    Step prev = null;
    
    Step(int num, int cost) {
        number =  num + 1;
        this.cost = cost;
    }
    void compute() {
        if (number < 4) {
            minToHere = cost;
            prev = StairDemo.stepArr[number-1];
            return ;
        }
        int min = StairDemo.stepArr[number-4].minToHere;
        int minIndex = number - 4;
        for (int i = number - 3; i < number - 1; i++) {
            if (min > StairDemo.stepArr[i].minToHere) {
                min = StairDemo.stepArr[i].minToHere;
                minIndex = i;
            }
        }
        StairDemo.stepArr[number - 1].minToHere = min + StairDemo.stepArr[number - 1].cost;
        StairDemo.stepArr[number - 1].prev = StairDemo.stepArr[minIndex];
    }
    void print() {
        if (number < 4) { 
            System.out.printf("[%d] %4d%4d\n", number, cost, minToHere);
            return;
        }
        prev.print();
        System.out.printf("[%d] %4d%4d\n", number, cost, minToHere);
    }
}
cs




<실행 결과>