랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다. 이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다. 정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요. 단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int k) {
int[] answer = new int[k];
answer[0]=arr[0];
int j=1;
for(int i=1; i< arr.length; i++){
if(!contains2(answer,arr[i])){
answer[j]=arr[i];
j++;
}
//k개 만큼 값을 넣으면 for문 탈출
if(j==k){
break;
}
}
for(int i=1; i<k; i++){
if(answer[i]==0){
answer[i]=-1;
}
}
return answer;
}
static Boolean contains2(int[] arr2, int num){
for(int a : arr2){
if(a==num ){
return true;
}
}
return false;
}
}
리스트로 풀까하다가 배열로도 그냥 풀수 있을것 같아서 배열로 풀어봤다
처음엔 무조건 원래 배열 수가 들어가야하니 0번인덱스는 고정으로 같게 해주고
for 문을 통해서 아래 만들어준 함수를 통해 포함 여부를 확인해주고
만약 없다면 추가해주는 식으로 하였다.!
그리고 다만들고 남은 부분은 -1 로 만들어주었다.!
'자바 알고리즘 문제' 카테고리의 다른 글
유한소수 판별하기 (0) | 2024.05.07 |
---|---|
저주의 숫자 3 (0) | 2024.05.03 |
왼쪽 오른쪽 (1) | 2024.05.01 |
잘라서 배열로 저장하기 (0) | 2024.04.30 |
리스트 자르기 (0) | 2024.04.30 |