투로드
Coder ToLoad
투로드
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 알고리즘
  • CS
  • GITHUB
  • 태그
  • 분류 전체보기 (69)
    • Toy Project (0)
      • EternalSNS (0)
    • Algorithm (46)
      • BaekJoon (38)
      • Programmers (7)
      • Code Tree (1)
    • Computer Science (13)
      • JAVA (7)
      • DataBase (4)
    • Backend (7)
      • Spring (2)
      • JPA (2)
      • Django (3)
    • Mobile (2)
      • Android (2)
    • Unity (1)

인기 글

최근 글

hELLO · Designed By 정상우.
투로드

Coder ToLoad

Algorithm/BaekJoon

[JAVA] 백준 13335 : 트럭

2021. 4. 20. 16:58
문제
 

13335번: 트럭

입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트

www.acmicpc.net

해결 방법

처음엔 큐를 사용해서 구현을 하려다가 그냥 리스트로 구현을 해도 무관해보여서 리스트로 구현을 했다.

 

Truck 클래스를 통해서 무게와 다리에 머문 시간 값을 가질 수 있게 해주었고,

다리에서 머문 시간이 w와 동일하면 리스트에서 제거해주는 방식을 사용했다.

리스트에서 값을 제거하면 index 값이 한 칸씩 앞으로 당겨지기 때문에 i--를 통해서 맞추어주었고,

 

다음 순서의 트럭이 어떤 트럭인지 알기위해 nextIdx를 사용했고,

nextIdx가 n 범위를 벗어나면 더 이상 남아있는 트럭이 없는 것이기 때문에 추가 작업을 하지 않도록 조건을 설정했다.

 

또 현재 다리에 있는 트럭들의 무게를 알기 위해 curWeight를 사용했고, 만약 현재 다리 위의 있는 트럭의 무게가 다음 트럭이 다리로 올라왔을 때 무게의 합이 L과 같거나 작으면 추가로 트럭이 다리 위를 지나갈 수 있기 때문에 그 경우에는 리스트에 추가하는 식으로 진행했다.

 

총 시간(result)은 1 부터 시작하는데 그 이유는 처음 트럭을 다리 위로 올려놓고 시작하기 때문에 1초가 소비되어서 그렇다.

 

코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
	
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int w = Integer.parseInt(st.nextToken());
        int L = Integer.parseInt(st.nextToken());
        
        int trucks[] = new int[n];
        st = new StringTokenizer(br.readLine(), " ");
        for (int i = 0; i < n; i++) {
        	trucks[i] = Integer.parseInt(st.nextToken());
        }
        
        ArrayList<Truck> list = new ArrayList<>();
        int curWeight = trucks[0];
        int nextIdx = 1;
        int result = 1;
        list.add(new Truck(trucks[0], 0));
        
       
        while(!list.isEmpty()) {
        	// 현재 리스트에 존재하는 즉, 다리 위에 있는 트럭들이
        	// 머문시간을 1씩 추가해준다.
        	for (Truck temp : list) {
        		temp.time++;
        	}
        	
        	// 다리 길이만큼 머물렀으면 다리를 지나간 것이므로
        	// 제거해준다.
        	for (int i = 0; i < list.size(); i++) {
        		if (list.get(i).time == w) {
        			curWeight -= list.get(i).weight;
        			list.remove(i);
        			i--;
        		}
        	}
        	
        	// 다리 위에 추가로 트럭이 더 올라갈 수 있다면
        	// 추가 해줌.
        	if (nextIdx < n) {
        		if (curWeight + trucks[nextIdx] <= L) {
            		list.add(new Truck(trucks[nextIdx], 0));
            		curWeight += trucks[nextIdx];
            		nextIdx++;
            	}
        	}
        	result++;
        }
        System.out.println(result);
    }
}

class Truck {
	int weight;
	int time;
	
	Truck(int weight, int time) {
		this.weight = weight;
		this.time = time;
	}
}

'Algorithm > BaekJoon' 카테고리의 다른 글

[JAVA] 백준 8972 : 미친 아두이노  (0) 2021.04.21
[JAVA] 백준 11967 : 불켜기  (0) 2021.04.20
[JAVA] 백준 4991 : 로봇 청소기  (0) 2021.04.19
[JAVA] 백준 6087 : 레이저 통신  (0) 2021.04.15
[JAVA] 백준 2638 : 치즈  (0) 2021.04.14
    'Algorithm/BaekJoon' 카테고리의 다른 글
    • [JAVA] 백준 8972 : 미친 아두이노
    • [JAVA] 백준 11967 : 불켜기
    • [JAVA] 백준 4991 : 로봇 청소기
    • [JAVA] 백준 6087 : 레이저 통신
    투로드
    투로드
    훌륭한 프로그래머가 되어가는 과정을 담아보는 중입니다.

    티스토리툴바