๊ฐœ์ธ๊ณต๋ถ€/Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํƒ์š•๋ฒ•(Greedy) ๊ตฌ๋ช…๋ณดํŠธ _ ์ž๋ฐ”Java

young_9 2020. 7. 8. 04:05

๋‚œ์ด๋„: Level 2

 1. ๋ฌธ์ œ 

| ๋ฌธ์ œ ์„ค๋ช…

๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ช…๋ณดํŠธ๋Š” ์ž‘์•„์„œ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 2๋ช…์”ฉ ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๊ณ , ๋ฌด๊ฒŒ ์ œํ•œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ [70kg, 50kg, 80kg, 50kg]์ด๊ณ  ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์ด 100kg์ด๋ผ๋ฉด 2๋ฒˆ์งธ ์‚ฌ๋žŒ๊ณผ 4๋ฒˆ์งธ ์‚ฌ๋žŒ์€ ๊ฐ™์ด ํƒˆ ์ˆ˜ ์žˆ์ง€๋งŒ 1๋ฒˆ์งธ ์‚ฌ๋žŒ๊ณผ 3๋ฒˆ์งธ ์‚ฌ๋žŒ์˜ ๋ฌด๊ฒŒ์˜ ํ•ฉ์€ 150kg์ด๋ฏ€๋กœ ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์—ฌ ๊ฐ™์ด ํƒˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด people๊ณผ ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ limit๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๊ตฌ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ตฌ๋ช…๋ณดํŠธ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

| ์ œํ•œ ์‚ฌํ•ญ

  • ๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ์€ 1๋ช… ์ด์ƒ 50,000๋ช… ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ฐ ์‚ฌ๋žŒ์˜ ๋ชธ๋ฌด๊ฒŒ๋Š” 40kg ์ด์ƒ 240kg ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์€ 40kg ์ด์ƒ 240kg ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๊ตฌ๋ช…๋ณดํŠธ์˜ ๋ฌด๊ฒŒ ์ œํ•œ์€ ํ•ญ์ƒ ์‚ฌ๋žŒ๋“ค์˜ ๋ชธ๋ฌด๊ฒŒ ์ค‘ ์ตœ๋Œ“๊ฐ’๋ณด๋‹ค ํฌ๊ฒŒ ์ฃผ์–ด์ง€๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ์ถœํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 


 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ by Yoon 

1) ์‹คํŒจ

           1. people ๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ArrayList ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

           2. sorting์„ ํ•œ๋‹ค.

           3. ๊ฐ’์ด ์ž‘์€ ์ˆœ์„œ๋ถ€ํ„ฐ limit ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š” ๋งŒํผ ์ตœ๋Œ€ํ•œ ํƒœ์šด๋‹ค.

           4. ํ•ด๋‹น index์˜ ๊ฐ’์„ ๋” ํ–ˆ์„ ๋•Œ limit ๋ฒ”์œ„๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด

                         1) answer++;

                         2) i--;

                         3) ์ง€๊ธˆ๊นŒ์ง€ ๋”ํ•ด์ง„ ๊ฐ’๋“ค์„ ๋ชจ๋‘ ArrayList์—์„œ ์‚ญ์ œํ•œ๋‹ค.

           => ์‹คํŒจ ์›์ธ: ๋ฌธ์ œ์—์„œ ์ตœ๋Œ€ 2๋ช… ๋ฐ–์— ํƒˆ ์ˆ˜ ์—†๋‹ค๋Š” ์กฐ๊ฑด์„ ์ œ๋Œ€๋กœ ์ฝ์ง€ ๋ชป ํ•ด limit ๋‚ด์— ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์ธ์›์„ ํƒœ์šฐ๊ณ ์ž ํ•จ.

                                ๊ทธ๋ž˜์„œ test case๋Š” ํ†ต๊ณผ ๋์œผ๋‚˜, ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ์—์„œ 3๊ฐœ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋‘ ์‹คํŒจ๊ฐ€ ๋œธ.

2) ์„ฑ๊ณต

           1. people ๋ฐฐ์—ด์— ๋‹ด๊ธด ๋ฐ์ดํ„ฐ๋ฅผ ArrayList ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.

           2. sorting์„ ํ•œ๋‹ค.

           3. ์ œ์ผ ์™ผ์ชฝ์ด๋ž‘ ์ œ์ผ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. left  = 0, right = people.length-1;

           4. left๊ฐ€ right๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ์ž‘์„ ๋•Œ๊นŒ์ง€ while๋ฌธ์„ ๋ˆ๋‹ค.

                4.1 ์™ผ์ชฝ์ด๋ž‘ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋”ํ–ˆ์„ ๋•Œ limit์„ ์ดˆ๊ณผํ•˜๋ฉด

                      ์ œ์ผ ๋ฌด๊ฑฐ์šด ์‚ฌ๋žŒ์€ ์ œ์ผ ๊ฐ€๋ฒผ์šด ์‚ฌ๋žŒํ•˜๊ณ ๋„ ํƒˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ํ˜ผ์ž ํƒ€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

                      ๋”ฐ๋ผ์„œ, ๋ณดํŠธ ํ•˜๋‚˜๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— answer๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , right๋ฅผ ํ•˜๋‚˜ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

                4.2 ์ดˆ๊ณผํ•˜์ง€ ์•Š์œผ๋ฉด ๋‘ ์‚ฌ๋žŒ ๋ชจ๋‘ ํƒˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— left๋Š” ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , right๋Š” ํ•˜๋‚˜ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

                4.3 left์™€ right๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋Š” ํ•œ ์‚ฌ๋žŒ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ์— answer๋ฅผ ํ•˜๋‚˜ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋™์‹œ์— while๋ฌธ์„ ๋น ์ ธ ๋‚˜์˜จ๋‹ค.

 

 


 3. ์†Œ์Šค์ฝ”๋“œ 

import java.util.*;

class Solution {
    public int solution(int[] people, int limit) {
        int answer = 0;
        int left = 0, right = people.length-1;
        
        // Array to ArrayList
        ArrayList<Integer> peopleList = new ArrayList<>();
        for(int i = 0; i < people.length; i++) peopleList.add(people[i]);
        
        // sorting
        Collections.sort(peopleList);
        
        while(left <= right){
            if(left == right ){	// ํ•œ ์‚ฌ๋žŒ๋งŒ ๋‚จ์€ ๊ฒฝ์šฐ
                answer++;
                break;
            }
            
            if(peopleList.get(left) + peopleList.get(right) > limit){	// ๋ฌด๊ฒŒ๋ฅผ ์ดˆ๊ณผํ•˜์—ฌ ์ œ์ผ ๋ฌด๊ฑฐ์šด ํ•œ ์‚ฌ๋žŒ๋งŒ ํƒ‘์Šน ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
                right--;
                answer++;
            } else {		// ๋‘ ๋ช… ๋‹ค ํƒ‘์Šน ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
                answer++;
                left++;
                right--;
            }  
           
        }
        return answer;
    }
}

 


 4. ๋А๋‚€์  

ํ‰์†Œ ์ƒ๊ฐํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋๊นŒ์ง€ ๊ณ ์ง‘ํ”ผ์šฐ๋ฉฐ ๋ช‡ ์‹œ๊ฐ„์„ ์žก๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜์„œ๋„ ํ’€๋ฆฌ์ง€ ์•Š๋Š” ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.  

 

 

 

 

 

[Algo Rhythm๐Ÿ•บ๐Ÿ’ƒ]

๋‚ ์งœ: 2020.07.08