[프로그래머스 / C++] 나누어 떨어지는 숫자 배열

YH·2023년 12월 13일
0

문제

나누어 떨어지는 숫자 배열 : 문제 링크


문제 분석

  • array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 return하는 함수, solution을 작성. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 return
  • 제한 사항
    • arr은 자연수를 담은 배열이다.
    • 정수 i, j에 대해 i != j 이면 arr[i] != arr[j] 이다.
    • divisor는 자연수이다.
    • array는 길이 1 이상인 배열이다.
  • 배열의 오름차순 정렬을 위해 sort() 함수를 사용할 것 이므로 algorithm 헤더를 포함
  • divisor로 나누어 떨어지는 값을 저장할 정수형 벡터 answer을 초기화. for loop를 통해 arr의 첫번째부터 마지막 원소까지 순환하고, if문을 통해 원소 arr[i]를 divisor로 나눈 나머지가 0이면 answer에 해당 인덱스의 원소를 저장. loop 탈출 후, if문과 empty() 함수를 사용하여, answer이 빈 배열이면 -1을 저장. 빈 배열이 아니라면 sort() 함수를 사용하여 answer 내의 원소를 오름차순으로 정렬 후, 최종적으로 저장된 answer을 return

algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬

  • sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
  • sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
  • sort(v.begin(), v.end(), less<자료형>()); // 오름차순

empty() 함수 사용법
str.empty();
v.empty();

  • string 또는 vector 객체가 비어있으면 1을, 문자열 또는 원소가 저장되어 있으면 0을 반환

풀이

#include <vector>
#include <algorithm>

using namespace std;

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

0개의 댓글