โ๏ธ๊ตฌ๋ช ๋ณดํธ
โ๋ฌธ์ ์ค๋ช
๋ฌด์ธ๋์ ๊ฐํ ์ฌ๋๋ค์ ๊ตฌ๋ช
๋ณดํธ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌ์ถํ๋ ค๊ณ ํฉ๋๋ค. ๊ตฌ๋ช
๋ณดํธ๋ ์์์ ํ ๋ฒ์ ์ต๋ 2๋ช
์ฉ ๋ฐ์ ํ ์ ์๊ณ , ๋ฌด๊ฒ ์ ํ๋ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋๋ค์ ๋ชธ๋ฌด๊ฒ๊ฐ [70kg, 50kg, 80kg, 50kg]์ด๊ณ ๊ตฌ๋ช
๋ณดํธ์ ๋ฌด๊ฒ ์ ํ์ด 100kg์ด๋ผ๋ฉด 2๋ฒ์งธ ์ฌ๋๊ณผ 4๋ฒ์งธ ์ฌ๋์ ๊ฐ์ด ํ ์ ์์ง๋ง 1๋ฒ์งธ ์ฌ๋๊ณผ 3๋ฒ์งธ ์ฌ๋์ ๋ฌด๊ฒ์ ํฉ์ 150kg์ด๋ฏ๋ก ๊ตฌ๋ช
๋ณดํธ์ ๋ฌด๊ฒ ์ ํ์ ์ด๊ณผํ์ฌ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
๊ตฌ๋ช
๋ณดํธ๋ฅผ ์ต๋ํ ์ ๊ฒ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ฌ๋์ ๊ตฌ์ถํ๋ ค๊ณ ํฉ๋๋ค.
์ฌ๋๋ค์ ๋ชธ๋ฌด๊ฒ๋ฅผ ๋ด์ ๋ฐฐ์ด people๊ณผ ๊ตฌ๋ช
๋ณดํธ์ ๋ฌด๊ฒ ์ ํ limit๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ฌ๋์ ๊ตฌ์ถํ๊ธฐ ์ํด ํ์ํ ๊ตฌ๋ช
๋ณดํธ ๊ฐ์์ ์ต์๊ฐ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
โ์ ํ ์ฌํญ
- ๋ฌด์ธ๋์ ๊ฐํ ์ฌ๋์ 1๋ช ์ด์ 50,000๋ช ์ดํ์ ๋๋ค.
- ๊ฐ ์ฌ๋์ ๋ชธ๋ฌด๊ฒ๋ 40kg ์ด์ 240kg ์ดํ์ ๋๋ค.
- ๊ตฌ๋ช ๋ณดํธ์ ๋ฌด๊ฒ ์ ํ์ 40kg ์ด์ 240kg ์ดํ์ ๋๋ค.
- ๊ตฌ๋ช ๋ณดํธ์ ๋ฌด๊ฒ ์ ํ์ ํญ์ ์ฌ๋๋ค์ ๋ชธ๋ฌด๊ฒ ์ค ์ต๋๊ฐ๋ณด๋ค ํฌ๊ฒ ์ฃผ์ด์ง๋ฏ๋ก ์ฌ๋๋ค์ ๊ตฌ์ถํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
โ์ ์ถ๋ ฅ ์
people | limit | return |
[70, 50, 80, 50] | 100 | 3 |
[70, 80, 50] | 100 | 3 |
๐ชํ์ด
Greedy(ํ์๋ฒ) ์๊ณ ๋ฆฌ์ฆ์ ์จ์ ํธ๋ ๋ฌธ์ ๋ก ์ต์ ์ ๋ต์ ๊ตฌํด๋ด๋ ๋ฌธ์ ์ด๋ค.
์ฒซ๋ฒ์งธ ๋ฌธ์ ๋ฅผ ๋ณด์๋ง์ ๋ ํ์ด๋ฒ์ผ๋ก๋ ์ ๋ ฌ์ ํ์ฌ ์์ ์์ ๊ฐ๋ค์ 2๋ช ์ฉ ๋ฌถ์ด์ ๋ฐฐ๋ฅผ ํ์ฐ๊ณ ๋ค์ ํฐ ๊ฐ๋ค์ ํผ์ ํ์์ ๋ณด๋ด๋ฉด ๋๋ค๊ณ ์ฃ๋ถ๋ฆฌ ์๊ฐํ๋ค. ํ์ง๋ง ๊ทธ ๋ฐฉ๋ฒ ์ต์๊ฐ ๋๋ ๊ฒฝ์ฐ๋ ์์ง๋ง, ๋ชจ๋ ๊ฒฝ์ฐ์์ ์ต์ ์ธ ์ฌํญ์ ์๋๋ค.
๋ฐ๋ก๋ก๋ ๋ค์๊ณผ ๊ฐ๋ค.
โ ํ๋ฆฐ ํ์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
import java.util.PriorityQueue;
public class LS_42885 {
public static void main(String[] args) {
int[] people = {70, 50, 80, 50};
int limit = 100;
System.out.println((solution(people, limit)));
}
public static int solution(int[] people, int limit) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
for (int person : people) {
pq.add(person);
}
int answer = 0;
while (!pq.isEmpty()) {
int firstPerson = pq.poll();
if (!pq.isEmpty()){
if ((firstPerson + pq.peek()) <= limit) {
pq.poll();
}
}
answer++;
}
return answer;
}
}
|
cs |
์์ ๋ฌธ์ ๋ ๋ค ๋ง์ง๋ง,
๋ฐ๋ก : [20, 30, 70, 80, 100] , 110
์ฃผ์ด์ง๋ค๋ฉด, ํ๋ฆฐ ๋ต์ ๋์ถ ํ๋ค.
์ ๋ก์ง๋๋ก ํผ๋ค๋ฉด 20-30 / 70 / 80 / 100 ์ด 4๋ฒ์ด ๊ฑธ๋ฆฐ๋ค.
ํ์ง๋ง 20-80/ 30-70/ 100 3๋ฒ์ด ๋ ์ต์ ํ๋ ์ต์ ๊ฐ์ด๋ค.
๊ทธ๋ฌ๋ ์ด๋ฐ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ๋ ์ต์ ์ ๊ฐ์ ๊ตฌํด์ผํ๊ธฐ ๋๋ฌธ์ 2๋ช ์ด ํ๊ฒฝ์ฐ๋ limit์ ์ ์ผ ์ต๋ํ ๊ฐ๊น๊ฒ ํด์ ํ์์ผ ์ต์ ๊ฐ์ ๊ตฌํ ์ ์๋ค.
์ ๋ก์ง์ด ํ๋ฆฌ๊ณ ๋์ ๋ฐ๋ก ์๋ชปํ์๋ค๋ ๊ฑธ ์ธ์งํ๊ณ ์์ ๊ฐ์ด ํ์ด์ผํ๋ค๋ ๊ฑธ ์ง๊ฐํ๋ค.
ํ์ง๋ง "๋ฐฐ๋ฅผ ํ์์ ๊ตฌ์ถํ๋ค" == "๋ฐฐ์ด์ ๊ฐ์ ์์ค๋ค." ๋ผ๋ ๊ฑฐ์ ๊ฝํ์ ๋ฐฐ์ด์ ๋ฆฌ์คํธ๋ก ๋ง๋ค์ด remove() ํ๊ฑฐ๋ ์คํ ๋๋ ํ๋ฅผ ์จ์ pop(), poll()ํด์ ํ์ด์ผ ํ๋ค๋ ์๊ฐ์๋ง ๋งค๋ชฐ ๋์๋ค.
โํ๋ฆฐ ํ์ด2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LS_42885_2 {
public static void main(String[] args) {
int[] people = {70};
int limit = 100;
System.out.println((solution(people, limit)));
}
public static int solution(int[] people, int limit) {
List<Integer> list = Arrays.stream(people)
.boxed().sorted().collect(Collectors.toList());
int cnt = 0;
while (!list.isEmpty()) {
int firstPerson = list.get(0);
for (int y = list.size() - 1; y > 0; y--) {
if ((firstPerson + list.get(y)) <= limit) {
list.remove(y);
break;
}
}
list.remove(0);
cnt++;
}
return cnt;
}
}
|
cs |
๊ฐ์ ์ญ์ ๋ฅผ ์ํด์ ๋ฐฐ์ด๋ณด๋จ ๋ฆฌ์คํธ๊ฐ ์ข๊ธฐ ๋๋ฌธ์ ๋ฆฌ์คํธ๋ก ๋ณํ ํ ๋งจ ์ผ์ชฝ๊ณผ limit์ ๊ฑธ๋ฆฌ์ง ์๋ ์ต๋์ ์ค๋ฅธ์ชฝ ๊ฐ์ ์ฐพ์์ ์์ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ํ์๋ค.
๋ญ ๋น์ฐํ๋ค๋ ๋ฏ์ด ํจ์จ์ฑ ํ ์คํธ ๋ชจ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ด๋ค.
โญ๋ง์ ํ์ด
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
import java.util.Arrays;
class Solution {
public int solution(int[] people, int limit) {
Arrays.sort(people);
int leftIndex = 0;
int rightIndex = people.length - 1;
int answer = 0;
while (leftIndex <= rightIndex) {
if (people[leftIndex] + people[rightIndex] <= limit) {
leftIndex++;
}
rightIndex--;
answer++;
}
return answer;
}
}
|
cs |
๐กํ์ด๋ฒ :
๋จผ์ ์ ๋ ฌ์ ์์ผ์ ํ์ด์ผ ํ๋ค๋ ์ ์ ํ๋ฆผ์์ด ๋ง๋ค. ๊ทธ ํ ํฌํฌ์ธํฐ ๋ฌธ์ ์ฒ๋ผ ๋งจ ์ ์ธ๋ฑ์ค์ ๋งจ ๋ ์ธ๋ฑ์ค, ์ฆ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๋น๊ตํด์ผํ๋ค. ์ฌ๊ธฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฎ๊ธธ๋ answer๊ฐ 1์ฉ ์ค๋ฅธ๋ค๋๊ฒ ๋ฐ๋ก ๋ฐฐ๋ฅผ ํ๊ณ ํ์ถ ํ๋ค๋ ์๋ฏธ์ด๋ค.
์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค๊ฐ ์ผ์ชฝ์ธ๋ฑ์ค์ ๊ฐ๋ณด๋ค ์์์ง๊ฒ ๋๋ฉด ์ค๋ณต๋ ๊ฐ์ ๋ ๊ฒ์ฌ ํ๊ฒ ๋๋ while() ๋ฌธ์ ์ต์์ชฝ์ ์ผ์ชฝ ์ธ๋ฑ์ค๋ ์ต๋ ๊ฐ๋ค์ด ์๋ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค์ ์ดํ์ฌ์ผํ๋ค.
์ค๋ฅธ์ชฝ์ ํฐ ์ฌ๋๋ถํฐ ํ๋ช ์ฉ ๋นผ๋ค, ์ผ์ชฝ ์ธ๋ฑ์ค์ ์ฌ๋๊ณผ ํฉ์ด limit ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง๋ฉฐ ๊ฐ์ด ๋ฐฐ๋ฅผ ํ๊ณ ํ์ถํ๋ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ ์ผ์ชฝ ์ธ๋ฑ์ค๋ ์ฎ๊ฒจ์ฃผ๊ณ ์ค๋ฅธ์ชฝ ์ธ๋ฑ์ค๋ ์ฎ๊ฒจ์ค๋ค answer ๊ฐ์ด ์ค๋ฅด๊ฒ ๋๋ค.
while (leftIndex <= rightIndex){ } ์ ์จ์ ์ธ๋ฑ์ค๋ฅผ ํฌํฌ์ธํฐ์ฒ๋ผ ์ฎ๊ฒจ์ฃผ๋ฉฐ ๊ฐ์ ๋น๊ตํ๋ ๊ฒ ํต์ฌ์ธ ๋ฌธ์ ์ด๋ค.
๋๊ธ