Truck

2ํšŒ์ฐจ ํ’€์ด ํ‹€๋ฆฐ ์ด์œ 

์ผ๋‹จ ํ์— ํŠธ๋Ÿญ ๋„ฃ์„ ๋•Œ์™€ ํ์—์„œ ํŠธ๋Ÿญ ๋บ„ ๋•Œ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆ„์–ด ์ƒ๊ฐํ•ด๋ดค๋‹ค. 1. ํ์— ํŠธ๋Ÿญ ๋บ„ ๋•Œ : ํ์˜ ํฌ๊ธฐ๊ฐ€ w(๋‹ค๋ฆฌ์˜ ๊ธธ์ด)์™€ ๊ฐ™์„ ๋•Œ => ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ ๋•Œ๋ฌธ์— ํŠธ๋Ÿญ์ด ํ•˜๋‚˜๋งŒ ๋“ค์–ด๊ฐ€์žˆ์„ ๋•Œ๋„ ์ด๋™์„ ํ•˜์ง€๋งŒ, ์กฐ๊ฑด์„ ์œ„์ฒ˜๋Ÿผ ๊ฑธ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ํ์—์„œ ํŠธ๋Ÿญ์ด ๋‚˜์˜ค์ง€ ์•Š๊ณ  ๋ฌดํ•œ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ์•„๋ฒ„๋ฆฐ๋‹ค. ๋ฌธ์ œ์—์„œ ํ•˜๋‚˜์˜ ๋‹จ์œ„์‹œ๊ฐ„์— ํ•˜๋‚˜์˜ ๋‹จ์œ„๊ธธ์ด๋งŒํผ ์ด๋™ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ๊นŒ ์‹œ๊ฐ„'2' ๋™์•ˆ ๊ฑฐ๋ฆฌ'2'๋ฅผ ์ด๋™ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜๋ฉด, ํ์— ํŠธ๋Ÿญ์„ ๋„ฃ์„ ๋•Œ ์‹œ๊ฐ„์„ ํ์— ํ•จ๊ป˜ ๋„ฃ์–ด์„œ ๊ธฐ๋กํ•ด์ฃผ๊ณ , ํ˜„์žฌ์˜ ์‹œ๊ฐ„์—์„œ ํ์˜ ์ œ์ผ ์ฒ˜์Œ ํŠธ๋Ÿญ์˜ . ์‹œ๊ฐ„์˜ ์ฐจ๊ฐ€ w(๋‹ค๋ฆฌ ๊ธธ์ด)์™€ ๊ฐ™๋‹ค๋ฉด ๊ทธ ์‹œ๊ฐ„ ์ฐจ๋งŒํผ ๊ฑฐ๋ฆฌ๋„ ์ด๋™ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

//ํ์—์„œ ๋‹ค๋ฆฌ ๋บ„ ๋•Œ.
if(time-q.peek()[1] == w) {
  weight -= q.remove()[0];
}

2. ํ์— ํŠธ๋Ÿญ ๋„ฃ์„ ๋•Œ ์กฐ๊ฑด - ๋„ฃ์„ ํŠธ๋Ÿญ์˜ ์ธ๋ฑ์Šค idx < n - ๋„ฃ์„ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ + ํ˜„์žฌ ๋‹ค๋ฆฌ ์œ„ ํŠธ๋Ÿญ ๋ฌด๊ฒŒ ํ•ฉ <= L - ํ˜„์žฌ ํ์˜ ํฌ๊ธฐ์™€ ๋‹ค๋ฆฌ ๊ธธ์ด ๋น„๊ต

์ธ๋ฑ์Šค ๋ฒ”์œ„ ๋งŒ์กฑ, ๋ฌด๊ฒŒ ํ•ฉ ์กฐ๊ฑด ๋งŒ์กฑํ•ด๋„ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ผ๋ฉด ํŠธ๋Ÿญ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค! ex) n = 3, w = 2, L = 3 : ํ˜„์žฌ ๋‹ค๋ฆฌ 11์ธ๊ฒฝ์šฐ ํ˜„์žฌ ํ์˜ ํฌ๊ธฐ == w์ด๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ํŠธ๋Ÿญ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ ํฌ๊ธฐ ๋น„๊ต์กฐ๊ฑด์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•„๋„ 1๋ฒˆ(์‹œ๊ฐ„์ฐจ ์ด์šฉ)์—์„œ ํ์—์„œ ํŠธ๋Ÿญ์„ ๋บ„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ์ •๋‹ต์„ ๋„์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

if(q.size()<w && idx<n && weight+t[idx]<=l) {//ํ์˜ ํฌ๊ธฐ๋„ w๋ณด๋‹ค ์ž‘์•„์•ผํ•˜๋Š” ์กฐ๊ฑด. ํ˜„์žฌ ํ์— 11์ด ๋“ค์–ด์žˆ๊ณ  L์€ 3์ด์ง€๋งŒ w๊ฐ€ 2๋ผ๋ฉด ๋”์ด์ƒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!
  q.add(new int[] {t[idx],time});
  weight += t[idx];
	idx++;
}

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ƒ๊ฐ

  1. ํ์— ํŠธ๋Ÿญ ๋„ฃ๋Š”๋‹ค.

0๋ฒˆ์งธ ํŠธ๋Ÿญ์ด L๋ณด๋‹ค ์ž‘์œผ๋ฉด ํ์— ๋„ฃ๋Š”๋‹ค. i-for๋ฌธ์„ ๋Œ๋ฆฌ๋ฉฐ i๋ฒˆ์งธ ํŠธ๋Ÿญ + q.peek() <= L์ด๋ฉด ํ์— ๋„ฃ๋Š”๋‹ค. (=> ํ‹€๋ฆฐ ๋ถ€๋ถ„ : ํŠธ๋Ÿญ ๊ฐ’์˜ ํ•ฉ์ด L๋ณด๋‹ค ์ž‘์œผ๋ฉด ํŠธ๋Ÿญ์„ ๊ณ„์† ๋„ฃ์„ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค!) (ํŠธ๋Ÿญ์„ ๋„ฃ์œผ๋ฉด์„œ๋„ time์€ ๊ณ„์† ์ฆ๊ฐ€)

2. ํ ์‚ฌ์ด์ฆˆ๊ฐ€ W๊ฐ€ ๋˜๋ฉด ์ œ์ผ ์•ž์˜ ํŠธ๋Ÿญ๋ถ€ํ„ฐ ๊บผ๋‚ด๊ณ  time ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค.

์ˆ˜์ •

1๋ฒˆ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ํ์— ๋“ค์–ด๊ฐ„ ํŠธ๋Ÿญ๊ฐ’์˜ ํ•ฉ์„ sum์— ์ €์žฅํ•ด์ฃผ๊ณ , sum์ด L๋ณด๋‹ค ์ž‘๋‹ค๋ฉด i๋ฒˆ์งธ ํŠธ๋Ÿญ์„ ํ์— ๋„ฃ๊ณ , L๋ณด๋‹ค ํฌ๋ฉด i-1๋ฒˆ์งธ๊นŒ์ง€๋งŒ ๋„ฃ์–ด์ค€๋‹ค. ์ง€๊ธˆ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ i๋ฒˆ์งธ๊นŒ์ง€ ํŠธ๋Ÿญ๊ฐ’ ํ•ฉ์ด L ์ดˆ๊ณผํ•˜๋ฉด ๊ทธ๋ƒฅ ์•ˆ ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ! =>if(i-1>=0)๋ฌธ ์‚ญ์ œํ•ด์•ผํ• ๋“ฏ.

for(int i=0;i<n;i++) {
			sum += truck[i];
			if(sum <= l) {
				q.add(truck[i]);time++;
			} else {//i-1๊นŒ์ง€ ํŠธ๋Ÿญ๋งŒ ๋„ฃ๋Š”๋‹ค!
				if(i-1>=0) {
					q.add(truck[i-1]);time++;
				}
			}
			//time = time+w+q.size();
			if(q.size()==w) {
				while(!q.isEmpty()) {
					q.remove();
					//time++;
					time = time+q.size();
				}
			}
		}

Solution

  1. ํ์— ๋„ฃ์„ ํŠธ๋Ÿญ idx๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์ฒ˜์Œ์— 0๋ฒˆ์งธ ํŠธ๋Ÿญ์„ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— idx๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

  2. ํ์—์„œ ๋บ„ ๋•Œ = ํ˜„์žฌ์˜ ์‹œ๊ฐ„ time-ํ ์ œ์ผ ์ฒซ ํŠธ๋Ÿญ์˜ ์‹œ๊ฐ„๊ฐ’ = w์ผ ๋•Œ = ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ ํ์˜ ์ฒซ ํŠธ๋Ÿญ์ด ํ์— ๋“ค์–ด๊ฐ„ ์‹œ๊ฐ„์ฐจ๊ฐ€ w์ด๋ฉด ๊ทธ ํŠธ๋Ÿญ์€ ๋‚˜์˜จ๋‹ค! = ํŠธ๋Ÿญ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์€ L๊ฐ’์„ ๊ฐ€๊ฐํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค! L = L + q.peek()[0]

  3. ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ ๊ณ„์‚ฐ 1๋ฒˆ๊ณผ 2๋ฒˆ(ํŠธ๋Ÿญ์„ ๋„ฃ์„ ๋•Œ, ๋บ„๋•Œ)์„ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ๋ฐ˜๋ณต๋ฌธ์„ ํ•œ๋ฒˆ ๋Œ ๋•Œ๋งˆ๋‹ค time์„ 1์”ฉ ์ฆ๊ฐ€์‹œ์ผœ์ค€๋‹ค. ํ๊ฐ€ ๋น„์ง€ ์•Š์„๋™์•ˆ๋งŒ ๋ฐ˜๋ณตํ•œ๋‹ค.(while(!q.isEmpty)

Last updated