π λ¬Έμ
https://www.acmicpc.net/problem/13335
13335λ²: νΈλ
μ λ ₯ λ°μ΄ν°λ νμ€μ λ ₯μ μ¬μ©νλ€. μ λ ₯μ λ μ€λ‘ μ΄λ£¨μ΄μ§λ€. μ λ ₯μ 첫 λ²μ§Έ μ€μλ μΈ κ°μ μ μ n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)μ΄ μ£Όμ΄μ§λλ°, nμ λ€λ¦¬λ₯Ό 건λλ νΈ
www.acmicpc.net
π μμ΄λμ΄
μ²μμ λ³΄κ³ λ μ°μ μμ νλ₯Ό μ΄μ©ν΄μ νΈλ λ¬Έμ νμ΄κ° μκ°λ¬λ€. κ·Όλ° μ΄μ°¨νΌ λ¨Όμ λ€μ΄κ°λ κ² λ¨Όμ λμ€λκΉ κ·Έλ₯ νλ‘ νμ΄νλ€
νΈλμ΄ λ€λ¦¬μ μ μ₯νλ€λ©΄ ν΄λΉ νΈλμ 무κ²μ λ€μ μ°¨λ‘ νΈλ 무κ²μ ν©μ λ°λΌ λ€μ νΈλμ΄ μ μ₯ν μ μλμ§κ° μ ν΄μ§λ€.
κ·Έλ¦¬κ³ ν νμμλ νλμ νΈλλ§ λ€λ¦¬μ μ μ₯ν μ μλ€.
νΈλμ νμμ λΉΌλ κ²½μ°λ λ κ°μ§ κ²½μ°κ° μλ€.
1. νΈλμ΄ μ μ₯νλ €κ³ νλ μμ μ νμ λ§μ½ ν΄λΉ μκ°μλ μμ΄μΌ ν νΈλμ΄ μλ€λ©΄ λΊλ€.
2. νμ¬ λ€λ¦¬μμ νμ€μ λ€μ νΈλμ΄ λ€μ΄μμ λ μ΅λνμ€μ λμ΄λ²λ¦°λ€λ©΄ νμ μλ νΈλμ νλ λΊλ€.
νΈλμ λΊ νμλ νμ¬ λ€λ¦¬ μμ νΈλ νμ€μμ λΊ νΈλμ λΉΌκ³ , μκ°μ νΈλμ΄ λμ€λ μμ μΌλ‘ μ λ°μ΄νΈνλ€.
μ΄ κ³Όμ μ νμ¬ νΈλμ΄ λ€λ¦¬μ λ€μ΄κ° μ μμ λκΉμ§ λ°λ³΅ν νμ νμ¬ νΈλμ λ£λλ€.
νΈλμ λ£λ μμ μλ {νμ¬ μκ°+λ€λ¦¬μ κΈΈμ΄}μ΄κ³ λ°μ΄ν° μ μ₯μ©μΌλ‘ νΈλ 무κ²λ₯Ό λ£λλ€.
μ΄νμ λͺ¨λ νΈλμ΄ λ€λ¦¬μ μ¬λΌκ° νμλ κ°μ₯ λ§μ§λ§μ μ μ₯ν νΈλμ ν΄μ₯μκ°μ μμ ν λΉ μ Έλμ€λ μκ°+1μ ν΄μ£Όλ©΄ λ΅μ μΆλ ₯ν μ μλ€.
Dequeλ₯Ό μ¬μ©ν μ΄μ λ κ°μ₯ λ§μ§λ§μ λ¨μ μ°¨μ μκ°μ μΆλ ₯ν΄μΌ νλλ° νλ₯Ό μ΄μ©νλ©΄ λͺ¨λ λ½μλ΄μΌ νκΈ° λλ¬Έμ Dequeλ‘ λ§μ§λ§ μ°¨μ μκ°μ μΆλ ₯νλλ‘ νμλ€.
π νμ΄
package λ°±μ€.Deque;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Boj_13335_νΈλ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int busCnt = Integer.parseInt(st.nextToken());//λ²μ€ μ
int bridgeLength = Integer.parseInt(st.nextToken());//λ€λ¦¬ κΈΈμ΄
int bridgeMaxWeight = Integer.parseInt(st.nextToken());//μ΅λ νμ€
int nowTotalWeight = 0; //νμ¬ λ€λ¦¬μμ μ¬λΌμμλ λ²μ€λ€μ 무κ²μ ν©
Deque<int[]> onBridge = new ArrayDeque<>(); //[μκ°, 무κ²] λ€λ¦¬μμ μ¬λΌμμλ λ²μ€λ€
st = new StringTokenizer(br.readLine());
int time = 0;
while (busCnt-- > 0) {
int weight = Integer.parseInt(st.nextToken()); //μ΄λ²μ λ€μ΄κ° λ²μ€
//λ§μ½ νμ¬ μκ°μ΄λ©΄ λμμ΄μΌ ν μ°¨κ° μλ κ²½μ°μλ λΉΌμ€λ€.
//μ΄λ²μ μ°¨κ° λ€μ΄κ°μΌνλλ° λ¬΄κ²κ° μ΄λ―Έ μ΄κ³Ό λμλ€λ©΄ μ΄λ² μ°¨λ₯Ό λ£μ μ μμλκΉμ§ μ΄μ μ μλ μ°¨λ₯Ό λΊλ€.
while (!onBridge.isEmpty() && (bridgeMaxWeight < weight + nowTotalWeight || onBridge.peek()[0] <= time)) { //κ°λ₯ν μκ°κΉμ§ λΊλ€.
int[] nowCar = onBridge.pollFirst(); //μμ ν μ°¨κ° λΉ μ Έλμ¨λ€.
time = nowCar[0]; //κ°μ₯ λ§μ§λ§ μ°¨κ° λμ¨μκ°
nowTotalWeight -= nowCar[1]; //κ°μ₯ λ§μ§λ§ μ°¨κ° λμμΌλ―λ‘ λ€λ¦¬μ μ΅λ νμ€μμ λΉΌμ€λ€.
}
onBridge.addLast(new int[]{time + bridgeLength, weight}); //ν΄λΉ μ°¨κ° λμ¬ μκ°κ³Ό, ν΄λΉ νμ 무κ²
nowTotalWeight += weight;//ν΄λΉ μ°¨κ° λ€λ¦¬μλ‘ μ¬λΌκ°λ€.
time++; //ν νμμ΄ μ§λ¬λ€(ν νμμλ νλμ μ°¨λ§ λ³΄λΌ μ μλ€)
}
System.out.println(onBridge.pollLast()[0] + 1); //λ€λ¦¬μ μλ μ°¨κ° λͺ¨λ λΉ μ Έλκ° μκ°μ΄κΈ°μ 1μ λνλ€.
}
}
'λ°±μ€(boj)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA]2230 μ κ³ λ₯΄κΈ°, ν¬ ν¬μΈν°(골λ5) (0) | 2023.08.09 |
---|---|
[JAVA]11780 νλ‘μ΄λ, νλ‘μ΄λ μμ (1) | 2023.08.09 |
[JAVA]18869 λ©ν°λ²μ€2 , μ’νμμΆ (0) | 2023.07.28 |
[JAVA]1374 κ°μμ€ (0) | 2023.07.16 |
[JAVA]3109 λΉ΅μ§ (0) | 2023.07.12 |