▶set을 활용한 간단한 문제가 있어 정리해보고자 합니다.
문제설명
랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 합니다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위 내에서 무작위로 수를 뽑은 후, 지금까지 나온 적이 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 합니다.
이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해봅시다.
정수 배열 arr가 주어집니다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return 하는 solution 함수를 완성해 주세요.
단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return 합니다.
제한사항
- 1 ≤ arr의 길이 ≤ 100,000
- 0 ≤ arr의 원소 ≤ 100,000
- 1 ≤ k ≤ 1,000
입출력 예 & 설명
입출력 예 #1
- 앞에서부터 서로 다른 k개의 수를 골라내면 [0, 1, 2]가 됩니다. 따라서 [0, 1, 2]를 return 합니다.
입출력 예 #2
- 서로 다른 수의 개수가 2개 뿐이므로 서로 다른 수들을 앞에서부터 차례대로 저장한 [0, 1]에서 이후 2개의 인덱스를 -1로 채워 넣은 [0, 1, -1, -1]을 return 합니다.
나의 풀이
문제에서 요구하는 조건이 앞에서부터 서로 다른 k개를 구하는 문제이기 때문에 arr배열을 Set형을 사용하여 중복을 제거하고 변수 a에 저장해 줍니다.
그러면 Set 형 a가 만들어지고 a를 다시 전개 연산자(...)를 사용하여 요소를 전개해 주어 다시 배열로 만들어줍니다.
그렇게 된다면 중복을 제거한 arrS배열이 형성되는데 그리고 0번째 요소부터 k번째까지 undefined가 아니라면 answer 배열에 넣어줍니다.
다른 풀이
다른 풀이에서는 "나의 풀이"와 비슷한 맥락으로 Set을 사용하여 배열의 중복을 제거한 arrS 배열을 만들어주고, while문을 사용하여 중복을 제거한 배열 arrS의 길이가 k와 다르면 -1을 넣어줍니다.
즉 arrS의 길이가 k와 다르다는 의미는 arrS의 요소가 k개를 뽑을 수 있는 길이가 아니기 때문에 -1을 넣어줘야 하기 때문입니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 전국 대회 선발 고사 (JavaScript) (0) | 2024.02.20 |
---|---|
[프로그래머스] 그림 확대 (JavaScript) (0) | 2024.02.19 |
[프로그래머스] 문자열 뒤집기 (JavaScript) (1) | 2024.02.17 |
[프로그래머스] 조건 문자열 (JavaScript) (1) | 2024.02.16 |
[프로그래머스] 문자 개수 세기 (JavaScript) (1) | 2024.02.13 |