[ํ๋ก๊ทธ๋๋จธ์ค] ํ์๋ฒ(Greedy) ๊ตฌ๋ช ๋ณดํธ _ ์๋ฐJava
๋์ด๋: 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