https://programmers.co.kr/learn/courses/30/lessons/42583
์ฝ๋
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
class Truck{
int weight;
int index;
public Truck(int weight, int index) {
this.weight = weight;
this.index = index;
}
}
class Solution {
public static int solution(int bridge_length, int weight, int[] truck_weights) {
int time = 0;
// ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ํธ๋ญ
Queue<Integer> waitTruck = new LinkedList<Integer>();
// ํ์ฌ ๋ค๋ฆฌ ์๋ฅผ ๊ฑด๋๊ณ ์๋ ํธ๋ญ
List<Truck> workingTruck = new ArrayList<Truck>();
// ํธ๋ญ์ ๋ฌด๊ฒ ๋ฃ์ด์ค
for(int t : truck_weights)
waitTruck.add(t);
// ๋ค๋ฆฌ์ ํธ๋ญ์ ์ด ๋ฌด๊ฒ - ์ด๊ธฐ๊ฐ: ํ์ฌ ๋ค๋ฆฌ์๋ก ์ฌ๋ผ๊ฐ ํธ๋ญ(peek)
int totalWeight = waitTruck.peek();
// ์ฒซ๋ฒ์งธ ํธ๋ญ์ ๋ค๋ฆฌ์๋ก ๋ฐ๋ก ๊ฑด๋๋ฏ๋ก ๋ฃ์ด์ฃผ๊ธฐ,
workingTruck.add(new Truck(waitTruck.poll(), 0));
// ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋๊น์ง
while(!workingTruck.isEmpty()) {
time ++;
// โ
ํ์ฌ ๋ค๋ฆฌ์ ํธ๋ญ์ ๋ชจ๋ ํ์นธ ์ฉ ์ด๋์ํจ๋ค.
for(int i=0; i<workingTruck.size(); i++)
workingTruck.get(i).index ++;
// ๋ค๋ฆฌ๋ฅผ ๋ชจ๋ ๊ฑด๋ ํธ๋ญ์ ๋นผ์ค๋ค.
// ๋๊น์ง ๊ฐ์ผ๋ฉด working์์ ์ ์ธ
if(workingTruck.get(0).index > bridge_length) {
totalWeight -= workingTruck.get(0).weight;
workingTruck.remove(0);
}
// ๋ค๋ฆฌ์์ ํธ๋ญ์ ๋ ์ฌ๋ฆด ์ ์๋ ๊ฒฝ์ฐ์๋ ๋๊ธฐ์์ ๋นผ์ฃผ๊ณ , working์ ๋ฃ๋๋ค.
if(!waitTruck.isEmpty() && totalWeight + waitTruck.peek() <= weight) {
int nextTruck = waitTruck.poll();
totalWeight += nextTruck;
workingTruck.add(new Truck(nextTruck, 1));
}
}
return time;
}
ํ์ด
ํ + ๊ทธ๋ฆฌ๋ + ๊ตฌํ (?) ์ ๋์ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค.
๋ฌธ์ ํ๋ ์ด๊ฒ์ ๊ฒ ์๊ฐํ๋๋ผ ๋จธ๋ฆฌ๊ฐ ํฐ์ง๊ณ ,, ์ ๋ต ์ฝ๋ ๋ณด๋ฉฐ ์ดํดํ๋๋ฐ๋ ๋จธ๋ฆฌ๊ฐ ํฐ์ง ๋ฌธ์ ๋ค ...
์ฒ์์ ๋จผ์ ๋ค์ด์จ ํธ๋ญ์ด ๋จผ์ ๋๊ฐ๋ ์์์ฌ์ ํ๋ฅผ ์๊ฐํ๊ณ ,
ํธ๋ญ์ด ๋ค์ด์ฌ ๋ ๋ง๋ค ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋ ์ ์๋ ๋ฌด๊ฒ์ ๋น๊ตํด์, ๋ค์ ํธ๋ญ๋ ๋น๊ตํด๊ฐ๋ฉฐ ๋ฌด๊ฒ์ ๊ฒฌ๋์ ์๋์ง ์๋์ง
๋น๊ตํด๊ฐ๋์์ผ๋ก ํ๋ณํด์ ํด๊ฒฐํ๋ ค๊ณ ํ์ผ๋ ๊ตฌํ์ ๋ชปํ๊ณ ํ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ค.
https://taesan94.tistory.com/33
๋ค๋ฅธ ํ์ด๋ค์ ๋ด๋ ์ดํด๊ฐ ์๋์ ๋์๊ฒ ๊ทธ๋๋ง ์ดํด๊ฐ ๊ฐ๋ ์ฝ๋๋ฅผ ์ฐธ์กฐํ๊ณ , ๋๋ฒ๊น ์ ํด๋ณด๋ ์ด๋์ ๋ ์ดํด๊ฐ ๊ฐ๋ค.
๋ค์๋ด๋ ์ ๋ ๋ชป ํ ๋ฌธ์ ์ด๊ธฐ์ ์ฃผ๋ง์ ๋ค์ ๋ณต์ตํ๋ฉฐ ํ์ด๋ฅผ ์ฌ๋ฆฌ๊ฒ ๋ค . . .
2020.03.15 22:00 ํ์ด
์ฃผ์ด์ง ์ ์ถ๋ ฅ์์ bridge_length = 2 , weight = 10 , truck_weights = [7, 4, 5, 6]์ ๊ธฐ์ค์ผ๋ก ์๊ฐํ๋ค.
์ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ชจ๋ ํธ๋ญ์ด ๋ค ๊ฑด๋๋๊น์ง 1์ด์ฉ ์ฆ๊ฐ์ํค๋ฉฐ, ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง๊ฒ ๊ตฌํํ๋ค.
ํด๋์ค๋ฅผ ๋ฐ๋ก ์์ฑํด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ๋๋ ๊ฑฐ์ ์ฌ์ฉํ์ง ์์์ ๋ ์ด๋ ต๊ฒ ๋๊ผ๋ค.
Truck ํด๋์ค๋ฅผ ์์ฑํ๋๋ฐ, ์ด ํธ๋ญ ๊ฐ์ฒด๋ ํธ๋ญ์ ๋ฌด๊ฒ(๋ฌธ์ ์์ ์ฃผ์ด์ง truck_weights)์
์ธ๋ฑ์ค(ํธ๋ญ์ด ๋ค๋ฆฌ ์์์ ์์น๋ฅผ ๋ํ๋)๋ฅผ ๋ณ์๋ก ๊ฐ๋ ํด๋์ค๋ค.
๋ค๋ฆฌ๋ฅผ ๊ฑด๋๊ธฐ ์ ์ ํธ๋ญ์ ๋ฃ์ ํ waitTruck์ ํ์ฌ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๊ณ ์๋ ๋ฆฌ์คํธ workingTruck
๋ฅผ ์ ์ธํ๋ค.
waitTruck ์๋ ํ์ฌ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ฃ์ด์ค๋ค. ๊ทธ๋ผ ํ์๋ 7, 4, 5, 6 ์ด ์์๋๋ก ์ ์ฅ๋๋ค.
๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋์ผ ํ๋ฏ๋ก, ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ฆฌ์คํธ์ ๋ฃ์ด์ค๋ค.
๋ค๋ฆฌ ํธ๋ญ์ ์ด ๋ฌด๊ฒ๋ ๊ฐ ํธ๋ญ๋ณ๋ก ๋น๊ตํด์ผํ๋ฏ๋ก, ์ฒซ๋ฒ์งธ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ์ ์ฅํ๋ค.
// ๋ค๋ฆฌ์ ํธ๋ญ์ ์ด ๋ฌด๊ฒ - ์ด๊ธฐ๊ฐ: ํ์ฌ ๋ค๋ฆฌ์๋ก ์ฌ๋ผ๊ฐ ํธ๋ญ(peek) int totalWeight = waitTruck.peek(); // ์ฒซ๋ฒ์งธ ํธ๋ญ์ ๋ค๋ฆฌ์๋ก ๋ฐ๋ก ๊ฑด๋๋ฏ๋ก ๋ฃ์ด์ฃผ๊ธฐ, ์ธ๋ฑ์ค = 0(์ฒซ๋ฒ์งธ) workingTruck.add(new Truck(waitTruck.poll(), 0));
๊ทธ ํ ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋๊น์ง - while(!workingTruck.isEmpty()) 1์ด๋ง๋ค ํธ๋ญ์ ์ด๋ํ๊ณ , ๋ชจ๋ ๊ฑด๋ ํธ๋ญ์ด ์์ผ๋ฉด ์ ์ธํ๊ณ , ํธ๋ญ์ ๋ฌด๊ฒ(totalWeight)์ ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋์ ์๋ ๋ฌด๊ฒ(weight)๋ฅผ ๋น๊ตํ๋ฉฐ ๋ค๋ฆฌ์ ๋ค์ ํธ๋ญ์ ์ฌ๋ฆด์ง, ์๋์ง ๋น๊ตํ๋ค.
ํธ๋ญ์ 1์ด์ 1๋งํผ ์์ง์ด๋ฏ๋ก, ํ์ฌ ๋ค๋ฆฌ์์ ์๋ ํธ๋ญ์ ๋ชจ๋ ํ ์นธ์ฉ ์ด๋์ํจ๋ค.
for(int i=0; i<workingTruck.size(); i++)
workingTruck.get(i).index ++;
์ด๋์ํจํ ๋ง์ฝ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํธ๋ญ์ด ์์๊ฒฝ์ฐ ๊ฑด๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋นผ๊ณ , ํ์ฌ ๋ฆฌ์คํธ์์ ์ ์ธํ๋ค.
if(workingTruck.get(0).index > bridge_length) {
totalWeight -= workingTruck.get(0).weight;
workingTruck.remove(0);
}
* ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ํธ๋ญ์ด ์๋์ง ํ์ธ์ ๋ฆฌ์คํธ์ ์ ์ฅ๋์ด์๋ ํธ๋ญ ๊ฐ์ฒด์ ์ธ๋ฑ์ค์ ๋ค๋ฆฌ์ ๊ธธ์ด๋ฅผ ๋น๊ตํ๋ฉด ๋๋ค.
๊ทธ ํ ํ์ฌ ํต๊ณผํ๋ ค๋ ํธ๋ญ๊ณผ, ๋ค๋ฆฌ์ ์๋ ํธ๋ญ์ ๋น๊ตํ๋ฉฐ ๋ฌด๊ฒ๋ฅผ ๋น๊ตํ๋ค.
๋ง์ฝ ๋ค๋ฆฌ์ ํธ๋ญ + ํ์ฌ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ํด๋ ๋ค๋ฆฌ๊ฐ ๊ฒฌ๋ ์ ์๋ ๋ฌด๊ฒ๋ณด๋ค ์์๊ฒฝ์ฐ(์งํฑ๊ฐ๋ฅํ๊ฒฝ์ฐ)
if(!waitTruck.isEmpty() && totalWeight + waitTruck.peek() <= weight)
ํธ๋ญ์ ์ฌ๋ฆฌ๊ณ , ํ์ฌ ๋ค๋ฆฌ์์ ์๋ ๋ชจ๋ ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ ๋ํด์ค๋ค.
int nextTruck = waitTruck.poll();
totalWeight += nextTruck;
๊ทธ ํ ๋ฆฌ์คํธ์ ํ์ฌ ํธ๋ญ ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ค.
workingTruck.add(new Truck(nextTruck, 1));
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Codeforces] 1303A: Erasing Zeroes (0) | 2020.03.16 |
---|---|
[๋ฐฑ์ค] 11945๋ฒ: ๋จ๊ฑฐ์ด ๋ถ์ด๋นต (0) | 2020.03.13 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level2)์ต์๊ฐ ๋ง๋ค๊ธฐ (0) | 2020.03.13 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level2)N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (0) | 2020.03.13 |
ํ๋ก๊ทธ๋๋จธ์ค[Java] - (Level2)ํฐ์ผ๋ชฌ (0) | 2020.03.13 |
๋๊ธ