[프로그래머스 / C++] 무작위로 K개의 수 뽑기

YH·2023년 12월 5일
0

문제

무작위로 K개의 수 뽑기 : 문제 링크


문제 분석

  • 랜덤으로 서로 다른 k개의 수를 저장한 배열을 만드려고 한다. 적절한 방법이 떠오르지 않기 때문에 일정한 범위내에서 무작위로 수를 뽑은 후, 지금까지 나온적인 없는 수이면 배열 맨 뒤에 추가하는 방식으로 만들기로 한다. 이미 어떤 수가 무작위로 주어질지 알고 있다고 가정하고, 실제 만들어질 길이 k의 배열을 예상해보자. 정수 배열 arr가 주어진다. 문제에서의 무작위의 수는 arr에 저장된 순서대로 주어질 예정이라고 했을 때, 완성될 배열을 return (단, 완성될 배열의 길이가 k보다 작으면 나머지 값을 전부 -1로 채워서 return)
  • answer 내에 arr의 원소가 존재하는지 확인하기 위해 find() 함수와 answer 크기를 할당하기 위해 resize() 함수를 사용하므로 algorithm 헤더를 include
  • 완성될 배열을 저장할 정수형 벡터 answer을 초기화. for loop를 통해 arr 첫번째부터 마지막 원소까지 순환하고, if문을 통해 answer 내에 현재 인덱스의 원소가 있는 지 확인하고 없다면 answer에 정수를 저장. loop 탈출 후, resize() 함수를 통해 answer의 사이즈를 k 크기만큼 할당하고, 빈 공간은 -1로 추가. 최종적으로 저장된 answer을 return

1. vector내에 해당 원소가 존재하는지 확인
=> find(v.begin(), v.end(), 찾을 대상)
1) return 값이 v.end()인 경우 => 해당 원소가 존재하지 않음
2) return 값이 v.end()가 아닌 경우 => 해당 원소가 존재함
2. vector내에서 해당 원소가 위치하는 인덱스 찾기
=> find(v.begin(), v.end(), 찾을 대상) - v.begin

algorithm 헤더의 resize() 함수 사용법
void resize (size_type n, value_type val);
n => 할당할 벡터의 사이즈
val => 할당할 벡터 사이즈가 기존보다 크다면 빈 공간을 채울 값


풀이

#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr, int k) {
    vector<int> answer;
    
    for(int i = 0; i < arr.size(); ++i) {
        if(find(answer.begin(), answer.end(), arr[i]) == answer.end()) answer.push_back(arr[i]);
    }
    answer.resize(k, -1);
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글