변경이력

돌아가기
3 1개 문자 추가 3개 문자 삭제

2016/10/14 11:45

Moon TaeMin

# JAVA Truck, Bridge 클래스를 만들었습니다. Truck 자신의 위치를 알고 있습니다. Bridge 클래스는 현재 건너고 있는 트럭들을 리스트로 갖습니다. 리스트에 있는 트럭을 한 번에 시행에서 모두 왼쪽으로 이동합니다. 저는 W값에서 0으로 이동하면 다 이동했다고 판단하여 그 트럭을 리스트에서 제거 시킵니다. 트럭을 추가할 때는 현재 새로 들어올 트럭이 totalWeight에 포함이 되어도 최대 하중을 버틸 수 있는지 체크를 합니다. 버틸 수 있다면 리스트에 추가를 합니다. main 함수에는 모든 트럭이 추가됐는지 또는 모든 트럭이 다리를 지나갔는지 두 가지를 판단하여 while 문을 돌립니다. ### Truck 트럭 클래스 ```{.java} public static class Truck { private int weight; private int position; public Truck(int position, int weight) { this.position = position; this.weight = weight; } public void decraese() { this.position--; } public int getPosition() { return this.position; } public int getWeight() { return weight; } } ``` #### Bridge 클래스 ```{.java} public static class Bridge { private int W; private int L; private ArrayList<Truck> trucks; int totalWeight = 0; public Bridge(int w, int l) { W = w; L = l; trucks = new ArrayList<>(); } public void moveLeft() { Truck removed = null; if (trucks == null) { return; } if (trucks.size() < 1) { return; } for (Truck truck : trucks) { truck.decraese(); if(truck.getPosition() < 1) { totalWeight -= truck.getWeight(); removed = truck; } } if (removed != null) { trucks.remove(removed); } } public int trucksSize() { return trucks.size(); } public void enterTruck(Truck truck) { totalWeight += truck.getWeight(); trucks.add(truck); } public boolean ableEnterTruck(int weight) { if (totalWeight + weight <= L && trucks.size() < W) { return true; } else { return false; } } } ``` # M### Main 클래스 ```{.java} public class TruckACM2016 { static final int SIZE = 1000; static int n, w, l; public static void main(String[] args) { // TODO Auto-generated method stub int[] A = getInput(args); int i=0; int count =0; Bridge bridge = new Bridge(w, l); Truck truck; while(i<n || bridge.trucksSize() > 0) { bridge.moveLeft(); if (i<n && bridge.ableEnterTruck(A[i])) { truck = new Truck(w, A[i]); bridge.enterTruck(truck); i++; } count++; } System.out.println("count : "+count); } public static int[] getInput(String[] args) { int i = 0; int[] input = new int[SIZE]; n = Integer.valueOf(args[i++]); w = Integer.valueOf(args[i++]); l = Integer.valueOf(args[i++]); for (; i<n+3; i++) { input[i-3] = Integer.valueOf(args[i]); } return input; } ```
# JAVA Truck, Bridge 클래스를 만들었습니다. Truck 자신의 위치를 알고 있습니다. Bridge 클래스는 현재 건너고 있는 트럭들을 리스트로 갖습니다. 리스트에 있는 트럭을 한 번에 시행에서 모두 왼쪽으로 이동합니다. 저는 W값에서 0으로 이동하면 다 이동했다고 판단하여 그 트럭을 리스트에서 제거 시킵니다. 트럭을 추가할 때는 현재 새로 들어올 트럭이 totalWeight에 포함이 되어도 최대 하중을 버틸 수 있는지 체크를 합니다. 버틸 수 있다면 리스트에 추가를 합니다. main 함수에는 모든 트럭이 추가됐는지 또는 모든 트럭이 다리를 지나갔는지 두 가지를 판단하여 while 문을 돌립니다. ### Truck 트럭 클래스 ```{.java} public static class Truck { private int weight; private int position; public Truck(int position, int weight) { this.position = position; this.weight = weight; } public void decraese() { this.position--; } public int getPosition() { return this.position; } public int getWeight() { return weight; } } ``` #### Bridge 클래스 ```{.java} public static class Bridge { private int W; private int L; private ArrayList<Truck> trucks; int totalWeight = 0; public Bridge(int w, int l) { W = w; L = l; trucks = new ArrayList<>(); } public void moveLeft() { Truck removed = null; if (trucks == null) { return; } if (trucks.size() < 1) { return; } for (Truck truck : trucks) { truck.decraese(); if(truck.getPosition() < 1) { totalWeight -= truck.getWeight(); removed = truck; } } if (removed != null) { trucks.remove(removed); } } public int trucksSize() { return trucks.size(); } public void enterTruck(Truck truck) { totalWeight += truck.getWeight(); trucks.add(truck); } public boolean ableEnterTruck(int weight) { if (totalWeight + weight <= L && trucks.size() < W) { return true; } else { return false; } } } ``` # M### Main 클래스 ```{.java} public class TruckACM2016 { static final int SIZE = 1000; static int n, w, l; public static void main(String[] args) { // TODO Auto-generated method stub int[] A = getInput(args); int i=0; int count =0; Bridge bridge = new Bridge(w, l); Truck truck; while(i<n || bridge.trucksSize() > 0) { bridge.moveLeft(); if (i<n && bridge.ableEnterTruck(A[i])) { truck = new Truck(w, A[i]); bridge.enterTruck(truck); i++; } count++; } System.out.println("count : "+count); } public static int[] getInput(String[] args) { int i = 0; int[] input = new int[SIZE]; n = Integer.valueOf(args[i++]); w = Integer.valueOf(args[i++]); l = Integer.valueOf(args[i++]); for (; i<n+3; i++) { input[i-3] = Integer.valueOf(args[i]); } return input; } ```
2 366개 문자 추가

2016/10/14 11:44

Moon TaeMin

1 Original

2016/10/14 11:39

Moon TaeMin

코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.