Development/CodingTest

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] Java ๋‹ค๋ฆฌ๋ฅผ ์ง€๋‚˜๋Š” ํŠธ๋Ÿญ

Kirok Kim 2021. 12. 14. 22:12
  • ๊ธฐ์กด์—๋Š” queue๋ฅผ array๋ฆฌ์ŠคํŠธ๋กœ ์–ด๋–ป๊ฒŒ๋“  ํ’€์—ˆ๋Š”๋ฐ ๊ทธ๊ฑธ ์“ฐ์ง€ ์•Š๊ณ ์„œ๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒ ์ฝ”๋“œ๊ฐ€ ์งœ์—ฌ์ ธ์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ ธ๋‹ค.

์•„๋ž˜๋Š” queue๋ฅผ ์ด์šฉํ•œ ํ•ด๋‹ต์ด๋‹ค.

import java.util.LinkedList;
import java.util.Queue;
import java.util.List;
import java.util.ArrayList;
 
public class Truck {
    int w;
    int d;
    
    public Truck(int w, int d) {
        this.w = w;
        this.d = d;
    }
}
 
class Solution {
    public int solution(int bridge_length, int weight, int[] truck_weights) {
        
        int wL = weight;
        int cnt = 0;
        Truck t = null;
        
        Queue<Truck> o = new LinkedList<Truck>();
        List<Truck> i = new ArrayList<Truck>();
 
        for (int l : truck_weights) {
            o.add(new Truck(l, bridge_length));
        }
 
        while (!(i.isEmpty()&&o.isEmpty())) {
            cnt++;
            
            if (!i.isEmpty() && i.get(0).d <= 0) {
                wL += i.get(0).w;
                i.remove(0);
            }
            
            if (!o.isEmpty() && wL - o.peek().w >= 0) {
                wL -= o.peek().w;
                i.add(o.poll());
            }
            
            for (int j = 0; j < i.size(); j++) {
                t = i.get(j);
                t.d--;
            }
        }
        return cnt;
    }
}
 for (int l : truck_weights) {
            o.add(new Truck(l, bridge_length));
        }
  • ํŠธ๋Ÿญ์„ ์ „๋ถ€ o์—๋‹ค๊ฐ€ ์ €์žฅ์„ ํ•ด์ค€๋‹ค.
  • ์ด๋•Œ ํŠธ๋Ÿญ์€ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ, ๋‹ค๋ฆฌ์˜ ๊ธธ์ด์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค.
        while (!(i.isEmpty()&&o.isEmpty())) {
            cnt++;
  • ๋‹ค๋ฆฌ ์œ„ ํŠธ๋Ÿญ(i)์™€ ๊ฑด๋„ˆ๊ธฐ ์ „ ํŠธ๋Ÿญ(o)๊ฐ€ ์ „๋ถ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๊ณ„์† ์‹คํ–‰์„ ํ•˜๊ณ  ๋‹ค๋ฆฌ๋ฅผ ์ „๋ถ€ ๊ฑด๋„ ๋•Œ์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด cnt++ํ•ด์ค€๋‹ค.
            if (!i.isEmpty() && i.get(0).d <= 0) {
                wL += i.get(0).w;
                i.remove(0);
            }
  • ๋‹ค๋ฆฌ ์œ„์— ํŠธ๋Ÿญ์ด ์žˆ๊ณ  ๋‹ค๋ฆฌ ์œ„์˜ ์ฒซ ๋ฒˆ์งธ ํŠธ๋Ÿญ์˜ ๋‚จ์€ ๊ฑฐ๋ฆฌ๊ฐ€ 0์ดํ•˜ ์ผ ๋•Œ
  • ๋‹ค๋ฆฌ๊ฐ€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ํ•˜์ค‘(wL)์„ ์ฒซ ๋ฒˆ์งธ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋งŒํผ ๋”ํ•ด์ฃผ๊ณ  ๋‹ค๋ฆฌ ์œ„ ์ฒซ ๋ฒˆ์งธ ํŠธ๋Ÿญ์„ ์ œ๊ฑฐํ•ด์ค€๋‹ค.
            if (!o.isEmpty() && wL - o.peek().w >= 0) {
                wL -= o.peek().w;
                i.add(o.poll());
            }
  • ๊ฑด๋„ˆ๊ธฐ ์ „ ํŠธ๋Ÿญ(o)์ด ์•„์ง ์žˆ๊ณ  ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ํ•˜์ค‘(wL)์ด ๊ฑด๋„ˆ๋ ค๋Š” ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋” ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์œผ๋ฉด ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ฌด๊ฒŒ์— ๊ฑด๋„ˆ๋Š” ์ฒซ ํŠธ๋Ÿญ์˜ ๋ฌด๊ฒŒ ๋งŒํผ ๋นผ์ฃผ๊ณ  ๊ทธ ํŠธ๋Ÿญ์€ ๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ(i)์—์„œ ๋บด์ค€๋‹ค.
            for (int j = 0; j < i.size(); j++) {
                t = i.get(j);
                t.d--;
            }
        }
        return cnt;
    }
}
  • ๋‹ค๋ฆฌ ์œ„์— ์žˆ๋Š” ํŠธ๋Ÿญ์˜ ๋‚จ์•„์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ์‹œ๊ฐ„์ด ๊ฐ€๋ฉด ๊ฐˆ์ˆ˜๋ก ํ•˜๋‚˜์”ฉ ์ค„์—ฌ์ค€๋‹ค. ๋งˆ์ง€๋ง‰ ๋ฆฌํ„ด ๊ฐ’์€ ๋‹ค ๊ฑด๋„Œ ์‹œ๊ฐ„์ธ cnt๊ฐ€ ๋ฐ˜ํ™˜์ด ๋œ๋‹ค. 
  • ๋ณดํ†ต์€ getter setter๋กœ ํ•˜์ง€๋งŒ truckํด๋ž˜์Šค์— ํ•„๋“œ์˜ ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ public์ด๋ผ๊ณ  ์ง€์ •ํ•ด์คฌ๊ณ  getter,setter๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ๋‚จ์•„์žˆ๋Š” ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐ”๊พธ์–ด์ฃผ์—ˆ๋‹ค.
๋ฐ˜์‘ํ˜•