프로그래머스 무작위로 K개의 수 뽑기

KIMYEONGJUN·2026년 7월 20일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다.
적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.
이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다.
정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요.
단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.

내가 이 문제를 보고 생각해본 부분

먼저 길이가 k인 정수 배열 answer를 생성한다.
중복을 빠르게 확인하기 위해 HashSet인 seen을 만든다.
배열 arr을 순회하면서 각 숫자를 꺼낸다.
만약 그 숫자가 seen에 없다면, 즉 처음 나오는 숫자라면:
seen에 추가하고,
answer 배열의 다음 인덱스에 넣은 후 인덱스 idx를 증가시킨다.
idx가 k에 도달하면 더 이상 중복 없이 뽑을 수 없으니 반복을 중단한다.
배열 순회가 끝났을 때 answer가 k보다 부족하면 남은 부분을 -1로 채운다.
마지막으로 완성된 answer 배열을 반환한다.

코드로 구현

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int k) {
        int[] answer = new int[k];
        Set<Integer> seen = new HashSet<>();
        int idx = 0;
        
        for (int num : arr) {
            if (!seen.contains(num)) {
                seen.add(num);
                answer[idx++] = num;
                if (idx == k) 
                    break; 
            }
        }
        
        for (; idx < k; idx++) {
            answer[idx] = -1;
        }
        
        return answer;
    }
}

프로그래머스 코드

package programmers;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

// 프로그래머스 무작위로 K개의 수 뽑기
public class Main87 {
    public static int[] solution(int[] arr, int k) {
        int[] answer = new int[k];
        Set<Integer> seen = new HashSet<>();
        int idx = 0;

        for (int num : arr) {
            if (!seen.contains(num)) {
                seen.add(num);
                answer[idx++] = num;
                if (idx == k)
                    break;
            }
        }

        for (; idx < k; idx++) {
            answer[idx] = -1;
        }

        return answer;
    }

    public static void main(String[] args) {
        int[] arr1 = {0, 1, 1, 2, 2, 3};
        int k1 = 3;
        System.out.println(Arrays.toString(solution(arr1, k1))); // [0, 1, 2]

        int[] arr2 = {0, 1, 1, 1, 1};
        int k2 = 4;
        System.out.println(Arrays.toString(solution(arr2, k2))); // [0, 1, -1, -1]
    }
}

위에 있는 코드를 변경한 코드

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글