Coding Test

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - 42885 : ๊ตฌ๋ช…๋ณดํŠธ ์˜ค๋‹ต๋…ธํŠธ (JAVA ํ’€์ด๋ฒ•)

ํ”„๋กœ๊ทธ๋ž˜๋จธ ์˜ค์›” 2023. 9. 15.

โœ”๏ธ๊ตฌ๋ช… ๋ณดํŠธ

 

โ—๋ฌธ์ œ ์„ค๋ช…

๋ฌด์ธ๋„์— ๊ฐ‡ํžŒ ์‚ฌ๋žŒ๋“ค์„ ๊ตฌ๋ช…๋ณดํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ช…๋ณดํŠธ๋Š” ์ž‘์•„์„œ ํ•œ ๋ฒˆ์— ์ตœ๋Œ€ 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 = {70508050};
        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){ } ์„ ์จ์„œ ์ธ๋ฑ์Šค๋ฅผ ํˆฌํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์˜ฎ๊ฒจ์ฃผ๋ฉฐ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๊ฒŒ ํ•ต์‹ฌ์ธ ๋ฌธ์ œ์ด๋‹ค.

 

 

 

๋Œ“๊ธ€