본문 바로가기
개발로그/알고리즘

프로그래머스 Lv.0 무작위로 k개의 수 뽑기

by 쩜징 2023. 7. 28.

프로그래머스 Lv.0 무작위로 k개의 수 뽑기


랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 한다.

일정한 범위 내에서 무작위로 수를 뽑은 후,

지금까지 나온적이 없는 수이면

배열 맨 뒤에 추가하는 방식으로 만든다.

정수 배열 arr가 주어지고, 무작위 수는

arr에 저장된 순서대로 주어질 예정이다.

완성된 배열을 return하라.

 

단, 완성될 배열의 길이가 k보다 작으면

나머지 값을 -1로 채워서 return한다.

 

arr k result
[0, 1, 1, 2, 2, 3] 3 [0, 1, 2]
[0, 1, 1, 1, 1] 4 [0, 1, -1, -1]

** 풀이 방법

 

arr배열의 중복값을 없애서

ArrayList에 저장한다.

List<Integer> list = new ArrayList<>();

for (int i=0; i<arr.length; i++) {
    if (!list.contains(arr[i]))
        list.add(arr[i]);
}

 

조건1)

list에 담긴 원소 개수가 k보다 같거나 크면

k개까지만 list의 원소를 저장한다.

 

조건2)

반대로 k보다 작으면

list의 원소를 모두 저장한 후

나머지 공간을 -1로 채운다. 

if (list.size()>=k) {
    for (int i=0; i<k; i++) {
        answer.add(list.get(i));
    }
} else if (list.size()<k) {
    for (int i=0; i<list.size(); i++) {
        answer.add(list.get(i));
    }
    int size = k-answer.size();
    for (int i=0; i<size; i++) {
        answer.add(-1);
    }
}

 

<> 전체 코드 </>

import java.util.*;
class Solution {
    public List<Integer> solution(int[] arr, int k) {
        List<Integer> list = new ArrayList<>();
        List<Integer> answer = new ArrayList<>();
        
        for (int i=0; i<arr.length; i++) {
            if (!list.contains(arr[i]))
                list.add(arr[i]);
        }

        if (list.size()>=k) {
            for (int i=0; i<k; i++) {
                answer.add(list.get(i));
            }
        } else if (list.size()<k) {
            for (int i=0; i<list.size(); i++) {
                answer.add(list.get(i));
            }
            int size = k-answer.size();
            for (int i=0; i<size; i++) {
                answer.add(-1);
            }
        }

        return answer;
    }
}

반응형

댓글