프로그래머스 Lv.0 무작위로 k개의 수 뽑기
![](https://t1.daumcdn.net/keditor/emoticon/face/large/073.png)
랜덤으로 서로 다른 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;
}
}
반응형
'개발로그 > 알고리즘' 카테고리의 다른 글
프로그래머스 Lv.0 정사각형으로 만들기 (0) | 2023.07.28 |
---|---|
프로그래머스 Lv.0 구슬을 나누는 경우의 수 (0) | 2023.07.28 |
프로그래머스 Lv.0 그림 확대 (0) | 2023.07.28 |
프로그래머스 Lv.0 수열과 구간 쿼리2 (0) | 2023.07.28 |
프로그래머스 Lv.0 세 개의 구분자 (0) | 2023.07.26 |
댓글