1. ๋ฌธ์ ์ ๋ํ์ฌ ๐ฆ
(1) ์กฐ๊ฑด ๋ถ์ ๐
- ๋๊ธฐ ์ค์ธ ํธ๋ญ์ด ์์๋๋ก ๋ค๋ฆฌ๋ฅผ ์ง๋๋ค.
- ๋ค๋ฆฌ๋ ๊ธธ์ด์ ๋ด๊ตฌ๋ ๋ฌด๊ฒ๊ฐ ์กด์ฌํ๋๋ฐ, ์ต๋ ๊ทธ ๊ธธ์ด ์๋งํผ์ ํธ๋ญ๋ง ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฉฐ, ์ฌ๋ผ๊ฐ ํธ๋ญ์ ๋ฌด๊ฒ ํฉ์ด ๋ค๋ฆฌ์ ๋ด๊ตฌ๋ ๋ฌด๊ฒ๋ฅผ ๋์ด์๋ฉด ์๋๋ค.
- ํธ๋ญ์ 1์ด์ ๋ค๋ฆฌ๋ฅผ ํ ์นธ์ฉ ๊ฑด๋๋ค. ํ์นธ = ๋ค๋ฆฌ์ ๊ธธ์ด/1
2. ์ฝ๋๊ฐ ๋์ค๊ธฐ๊น์ง ๐ ๏ธ
KEY WORD
: ํ ํ์ฉ
๋ชจ๋ ๋๊ธฐ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ์ง๋ ๋๊น์ง ๋ฐ๋ณตํด์ผํ๋ค.
๋ฐ๋ณต์ ๊ธฐ์ค์ ์ด๋จ์์ด๋ค. 1์ด๋ง๋ค ๋ฒ์ค๊ฐ ์์ง์ด๊ณ , ์๋ก์ด ๋ฒ์ค๊ฐ ๋ค๋ฆฌ์ ๋ค์ด์ค๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฌธ์ ์ ์ ์๋ ์กฐ๊ฑด ๊ทธ๋๋ก ๊ตฌํํ๋ฉด ๋๋ ๊ฒ์ด๋ผ์, ์ถ๊ฐ ์ค๋ช ์ SUDO CODE์์ ๋ง์ ํ๊ฒ ๋ค.
(1) ์๊ฐ๋ณต์ก๋ ๋ถ์ โณ
๋ค๋ฆฌ์ ๊ธธ์ด 10,000 , ํธ๋ญ์ ๊ฐ์ 10,000
๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ์ ๊ธธ์ด๋งํผ ์ด๋ํ๋ฉด ๋๋ค.
ํ๋์ ํธ๋ญ๋น 10,000์ ์ต์ข
์ ์ผ๋ก ์์ง์์ผ๋ก,
์ต์ข
์ ์ผ๋ก $O( 10,000 \times 10,000) = 10^{8}$
์ด๋ผ์ ์๋ฎฌ๋ ์ด์ ์ผ๋ก ๊ตฌํด๋ ์๊ฐ ์ด๊ณผ ์์ด ๊ตฌํ ์ ์์ ๋ฏํ๋ค.
3. ์ฝ๋ ๐
(1) SUDO CODE ๐ฌ
0. bridge ํด๋์ค ๋ง๋ค๊ธฐ
1. ๋๊ธฐ ํ๊ฐ ์์ผ๋ฉด์, bridge์ ๋ชจ๋ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋ ๋๊น์ง ๋ค์์ ๋ฐ๋ณตํ๋ค.
1. ํ ๋ฒ์ ๋ฐ๋ณต ๋น 1์ด ํ๋ฅด๊ธฐ
2. ๋ค๋ฆฌ์ ๋์ ์จ ํธ๋ญ ์ด๋ผ๋ฉด, ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๋๋ก ํ๊ธฐ
3. ๋ชจ๋ ๋ค๋ฆฌ ์์ ํธ๋ญ์ ํ ์นธ์ฉ ์์ผ๋ก ์ด๋
4. ๋๊ธฐ ์ค์ธ ํธ๋ญ ์ค ์ต์ฐ์ ์์ ํธ๋ญ์ด ๋ค๋ฆฌ์ ์
์ฅํ ์ ์๋ ์ง ์ฒดํฌ
1. ์์ผ๋ฉด ๋ค๋ฆฌ์ ๋ฃ๊ธฐ
2. ์์ผ๋ฉด ๋ฃ์ง ๋ง๊ณ ๋ค์ ๋ฐ๋ณต๋ฌธ ๋ฐ๋ณต
(2) JAVA CODE โ
import java.util.*;
class Solution {
static class Bridge {
int l;
int w;
int acc_cnt;
int acc_w;
int [] loc;
public Bridge(int l, int w){
this.l = l;
this.w = w;
this.acc_cnt = 0;
this.acc_w = 0;
this.loc = new int [l];
}
}
public int solution(int bridge_length, int weight, int[] truck_weights) {
Bridge bridge = new Bridge(bridge_length, weight);
ArrayDeque<Integer> bus = new ArrayDeque<>();
for(int i = 0; i < truck_weights.length; i++){
bus.add(truck_weights[i]);
}
int time = 0;
while(!bus.isEmpty() || bridge.acc_cnt != 0){
// ์๊ฐ ํ๋ฅด๊ธฐ
time++;
// ๋ค๋ฆฌ ๊ฑด๋ ์ ์๋ ๋ฒ์ค ๋นผ๊ธฐ
if(bridge.loc[bridge.l-1] != 0) {
bridge.acc_w -= bridge.loc[bridge.l-1];
bridge.acc_cnt -= 1;
bridge.loc[bridge.l-1] = 0;
}
// ๋ค๋ฆฌ ์ ๋ฒ์ค ํ์นธ์ฉ ์งํ
int [] temp = new int [bridge.l];
for(int i = 1; i < bridge.l; i++){
temp[i] = bridge.loc[i-1];
}
bridge.loc = temp;
// ๋ค์ ๋ฒ์ค ๋ฃ์ ์ ์๋์ง ํ์ธ
if(!bus.isEmpty()){
if(bus.peek() + bridge.acc_w > bridge.w || bridge.acc_cnt + 1 > bridge.l) continue;
int now_weight = bus.poll();
bridge.loc[0] = now_weight;
bridge.acc_cnt ++;
bridge.acc_w += now_weight;
}
}
return time;
}
}
4. ํธ๋ฌ๋ธ ์ํ or ๋ฐฐ์ด ์ ๐
A. enhanced-Loop์ ์ดํฐ๋ ์ดํฐ ํจํด
ํฅ์๋ for๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก iterator๋ก ๋ณํ์ด ๋๊ธฐ ๋๋ฌธ์ Collection์ ์์๋ฐ์ ๋ชจ๋ ์๋ฃ ๊ตฌ์กฐ ํด๋์ค์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ enhanced-Loop๋ฅผ ์ฌ์ฉํ๋ฉด queue๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ ์์ ์์๋ค์ ํ๋์ฉ ์กฐํํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ ๋ชฐ๋ผ์, queue ๋์ ๋ฐฐ์ด์ ์ ํํ๋๋ฐ, ๋ค์์ ์ด๋ฅผ ํ์ฉํด๋ด์ผ ๊ฒ ๋ค.
B. Java์ Iterator ํจํด
์๋ฐ์ Iterator ๊ฐ์ฒด๋ Collections๋ฅผ ์์๋ฐ์ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ ํด๋์ค์์ ํ์ฉ๋ ์ ์๋ค. ์ด๊ฒ์ java์์ iterator ํจํด์ ๊ตฌํํ ๋ฐฉ๋ฒ์ด๋ค.
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
Iterator<String> iterator = queue.iterator();
while(iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}