본문 바로가기
JAVA/Coding Test Study

[Lv.0] 프로그래머스 - 무작위로 K개의 수 뽑기 : Java

by ♡˖GYURI˖♡ 2024. 4. 30.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

처음에는 int 배열에 차례대로 저장하고, int 배열 값을 String으로 바꿔 String이 해당 값을 포함하고 있는지 확인하려 하였다.

하지만 Arrays.fill(answer, -1)을 해두면 String으로 변환 시 1이 걸리고, 그냥 int 배열은 기본이 0이라 0이 걸리는 문제가 생겼다.

계속 고민하다가 결국 풀이를 참고하였다.

 

 

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

풀이풀이방법1) 중복된 값을 제거하기 위한 HashSet 객체 set을 생성2) 중복값이 없을경우 if수행, count가 k와 같아지면 반복문 탈출3) 2번째 반복문을 통해 answer의 빈자리를 -1로 채운다.배열에서 중

velog.io

 

사실 Set을 떠올리기는 했는데 여전히 String으로 변환하는 것에 꽂혀있는 상황이었어서 제대로 활용하지 못했다.

 

 

문제풀이

import java.util.*;

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

 

  • set에 arr[i]가 없다면
    • set.add(arr[i]) 해주고
    • answer[count]에 arr[i]를 저장해준 후
    • count++
  • 만약 count가 k가 됐다면 break
  • 전부 수행한 후 부족한만큼 -1을 채워넣어줘야 하므로 count부터 k - 1까지 answer[i]에 -1을 넣어줄 것