한 번에 최대 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 |
<실행 결과>
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 피자 가게 프로그램 (0) | 2018.09.27 |
---|---|
[Java] Math.abs() 함수 (0) | 2018.09.19 |
[Java] 묵시적. 명시적 형 변환 (0) | 2018.09.18 |
[수치계산] 근접한 정수 구하기 (0) | 2018.09.17 |
[수치계산] 학생 점수 프로그램 (0) | 2018.09.13 |