각 계단마다 가격이 존재하고 마지막 계단을 밟기까지 최소 비용의 방법을 구하는 프로그램.
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 | import java.util.Scanner; /** * * 조건을 맞추려고 노력 많이 했습니다! * 객체지향 코딩에 대한 이해가 전보다는 나아진것 같습니다. * 부족한 부분은 피드백 주세요!! * * @author LeeJaeSeung (g0pher) */ public class StairDemo { public static void main(String [] args) { StairDemo start = new StairDemo(); start.doit(); } void doit() { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); Step [] stairs = new Step[N]; for (int i = 0; i < 3; i++) { stairs[i] = new Step(i+1, sc.nextInt()); } for (int i = 3; i < N; i++) { stairs[i] = new Step(i+1, sc.nextInt()); stairs[i].compute(stairs[i-1], stairs[i-2], stairs[i-3]); } stairs[N-1].print(); } } class Step { int number; int cost; int minToHere; Step prev = null; Step (int number, int cost) { this.number = number; this.cost = cost; minToHere = cost; } void compute(Step s1, Step s2, Step s3) { if (s1.compareTo(s2) == 1) { if (s2.compareTo(s3) == 1) { prev = s3; } else { prev = s2; } } else { if (s1.compareTo(s3) == 1) { prev = s3; } else { prev = s1; } } minToHere = prev.minToHere + cost; } void print() { if (prev != null) { prev.print(); } System.out.printf("[%2d] %d %d\n", number, cost, minToHere); } int compareTo(Step s) { if (minToHere < s.minToHere) { return 0; } return 1; } } | cs |
'Programing > Java' 카테고리의 다른 글
Java :: 피자 주문 프로그램 (0) | 2018.09.27 |
---|---|
Java :: 근접한 정수 구하기(시그마, 팩토리얼, 제곱) (0) | 2018.09.17 |
Java :: 음료 주문 처리 프로그램 (0) | 2018.09.12 |
Java :: 학생 점수로 우수학생 판별 프로그램 (0) | 2018.09.10 |
Java :: 가위바위보프로그램 (1) | 2018.03.26 |