https://school.programmers.co.kr/learn/courses/30/lessons/42583
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด๊ณผ์
1. ํ์ ํธ๋ญ์ ์ฌ๋ฆฌ๊ธฐ
1-1. ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฉด ํธ๋ญ์ ๋ฌด๊ฒ๋ฅผ offer
1-2. ์ฌ๋ผ๊ฐ ์ ์์ผ๋ฉด 0์ offer (๊ฐ์์ ํธ๋ญ)
2. ํ์์ ํธ๋ญ ๋นผ์ฃผ๊ธฐ
ํ์ size๊ฐ bridge_length์ ๊ฐ์์ง๋ค๋ฉด, ์ ์ผ ์์ ํ๋ ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๊ฐ ์ ์๋ฏ๋ก q.pollFirst()๋ก ํ์์ ๋นผ์ค์ผ ํฉ๋๋ค.
3. truck_weights๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค ํธ๋ญ ๊ณ ๋ คํ๊ธฐ
๋ง์ง๋ง ์ธ๋ฑ์ค ํธ๋ญ์ ํ์ ๋ฃ๋ ๊ฒฝ์ฐ๋, ์ดํ์ ํธ๋ญ์ด ์๊ธฐ ๋๋ฌธ์ q.size()==bridge_length ๋ก์ง์ผ๋ก๋ ํ์์ ํธ๋ญ์ ๋นผ์ค ์ ์์ต๋๋ค. ์๋ ์ฝ๋์์ if(idx==truck_weights.length) ๋ถ๋ถ ์ ๋๋ค.
if(q.size()+1 <= bridge_length && current_weight + w <= weight){ //๋ค๋ฆฌ์ ํธ๋ญ์ ์ฌ๋ฆด ์ ์์ผ๋ฉด
q.offer(w);
current_weight += w;
idx += 1;
if(idx==truck_weights.length){
return answer += bridge_length;
}
}
๋ง์ง๋ง ์ธ๋ฑ์ค ํธ๋ญ์ ๊ฒฝ์ฐ์๋, ๋ฌด๊ฒ๊ฐ 0์ธ ๊ฐ์์ ํธ๋ญ์ offerํ๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก q.size๋ ์ฆ๊ฐํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ํ์ size๊ฐ bridge_length์ ๊ฐ์์ง๋ค๋ ์กฐ๊ฑด์ผ๋ก ํ์์ ๋นผ์ค ์ ์๊ฒ ๋ฉ๋๋ค.
๋ง์ง๋ง ์ธ๋ฑ์ค ํธ๋ญ์ ๊ณ ๋ คํ๊ธฐ ์ํด์ bridge_length๋ฅผ answer์ ๋ํ ๋ค return ํด์ค์ผ ํฉ๋๋ค.
์ฒ์ ์๊ฐ
ํ์ ์ฌ๋ผ๊ฐ ํธ๋ญ๋ค์ ํ์ฌ ์์น๋ฅผ ์ด๋ป๊ฒ ๊ตฌํํด์ผ ์ข์์ง ์ ์๊ฐ์ด ๋์ง ์์์ต๋๋ค.
์ฒ์์๋ Truck ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ๋ฉค๋ฒ๋ณ์์ cnt ๊ฐ์ ์ฃผ์ด์ ๋งค ์ด๋ง๋ค ํ์ ๋ชจ๋ Truck ์ธ์คํด์ค์ cnt๊ฐ์ -- ํด์ฃผ๋ฉด ๋์ง ์์๊น? ๋ผ๊ณ ์๊ฐํ๋๋ฐ, ์ด ์๊ฐ์ ๋นํจ์จ ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ์ด์์ต๋๋ค.
๋ ํจ์จ์ ์ธ ๋ฐฉ์์ด ์์์ต๋๋ค.
๋ฐ๋ก, ํ์ size ๋ฉ์๋๋ฅผ ํ์ฉํ๊ณ ๋ฌด๊ฒ๊ฐ 0์ธ ๊ฐ์์ ํธ๋ญ์ ํ์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์์์ต๋๋ค.
ํ์ ํธ๋ญ์ด ์ฌ๋ผ๊ฐ ์ ์๋ ๊ฒฝ์ฐ 0 ์ ๋ฃ์ต๋๋ค.
ํ ์ฌ์ด์ฆ == bridge_length ๊ฐ ๋๋ฉด ํ ์ ์ผ ์์ ๊ฐ์ ์ ๊ฑฐํ์ฌ ํธ๋ญ์ด ๋ค๋ฆฌ๋ฅผ ๊ฑด๋๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
์๊ฒ๋ ์
- ๊ฐ์์ ํธ๋ญ(๋ฌด๊ฒ๊ฐ 0)๊ณผ ํ ์ฌ์ด์ฆ๋ก ๋ค๋ฆฌ ๊ฑด๋๊ธฐ ๋ก์ง์ ๊ตฌ์ฑํ ์ ์์์ ๋ฐฐ์ ์ต๋๋ค.
- ์ด๋ ์์ธ์ ๊ฒฝ์ฐ(๋ง์ง๋ง ์ธ๋ฑ์ค ํธ๋ญ)์ ์ ๊ณ ๋ คํด์ ๊ฐ์ ๊ฐฑ์ ํด์ค์ผ ํจ์ ์๊ฒ ๋์์ต๋๋ค.
์ ์ฒด์ฝ๋
import java.util.*;
class Solution {
public int solution(int bridge_length, int weight, int[] truck_weights) {
int answer = 0;
int current_weight = 0;
Deque<Integer> q = new ArrayDeque<>();
int idx = 0;
while(true){
int w = truck_weights[idx];
answer += 1;
if(q.size()+1 <= bridge_length && current_weight + w <= weight){ //๋ค๋ฆฌ์ ํธ๋ญ์ ์ฌ๋ฆด ์ ์์ผ๋ฉด
q.offer(w);
current_weight += w;
idx += 1;
if(idx==truck_weights.length){
return answer += bridge_length;
}
}else{ // ํธ๋ญ์ ๋ค๋ฆฌ์ ์ฌ๋ฆด ์ ์์ผ๋ฉด 0 ๋ฃ์ด์ฃผ๊ธฐ
q.offer(0);
}
if(q.size()==bridge_length){ // ํ๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒฝ์ฐ = ์ ์ผ ์์ ์๋ ํธ๋ญ์ด ๊ฑด๋๊ฐ๋ ๊ฒฝ์ฐ
current_weight -= q.pollFirst();
}
}
}
}
'๐์ฝ๋ฉํ ์คํธ:CodingTest' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[HSAT 1ํ ์ ๊ธฐ ์ฝ๋ฉ ์ธ์ฆํ๊ฐ ๊ธฐ์ถ] ๋ก๋ด์ด ์ง๋๊ฐ ๊ฒฝ๋ก (0) | 2024.06.28 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์๋ด์ ์ธ์ (0) | 2024.06.26 |
[PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ (0) | 2024.04.30 |
์์ค์ ๊ธฐ์ฌ ๋๊ฒฐ(์ผ์ฑ sw์ญ๋ํ ์คํธ) (0) | 2024.04.12 |
๋ฃจ๋ํ์ ๋ฐ๋(์ผ์ฑ sw์ญ๋ํ ์คํธ) (0) | 2024.04.10 |