프로그래머스 풀이

[c++]나누어 떨어지는 숫자 배열

Iam_noob 2024. 12. 9. 17:38
728x90
반응형

참조: 프로그래머스

문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

제한사항

  • arr은 자연수를 담은 배열입니다.
  • 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
  • divisor는 자연수입니다.
  • array는 길이 1 이상인 배열입니다.

입출력 예

arr divisor return
[5, 9, 7, 10] 5 [5, 10]
[2, 36, 1, 3] 1 [1, 2, 3, 36]
[3,2,6] 10 [-1]

 

문제풀이

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> arr, int divisor) {
    vector<int> answer;
    
    //오름차순으로 정렬
    sort(arr.begin(), arr.end());
    for(int i = 0; i < arr.size(); i++){
    	//나누어 떨어지는 값 확인
        if(arr[i] % divisor == 0){
        	//떨어지는 값만 삽입
            answer.push_back(arr[i]);
        }
    }
    //답 배열이 비어있으면 -1을 삽입
    if(answer.empty()){
        answer.push_back(-1);
    }
    return answer;
}

C++ 풀이 과정: 배열에서 나누어 떨어지는 값 찾기

1. 입력 배열 정렬

sort(arr.begin(), arr.end());
    

먼저, 배열을 오름차순으로 정렬합니다. 이를 통해 나누어 떨어지는 값들이 결과로 반환될 때 자동으로 오름차순 정렬 상태를 유지합니다.

  • std::sort 함수는 arr.begin()에서 arr.end()까지의 범위를 오름차순으로 정렬합니다.
  • 시간 복잡도는 O(nlogn)입니다.

2. 나누어 떨어지는 값 확인

for (int i = 0; i < arr.size(); i++) {
    if (arr[i] % divisor == 0) {
        answer.push_back(arr[i]);
    }
}
    

for 루프를 사용하여 배열의 각 요소를 확인하고, divisor로 나누어 떨어지는지 검사합니다.

  • arr[i] % divisor == 0: 나머지가 0이라면 나누어 떨어진다는 의미입니다.
  • 조건을 만족하는 경우, answer 벡터에 해당 값을 추가합니다.

3. 결과 처리

if (answer.empty()) {
    answer.push_back(-1);
}
    

만약 answer 벡터가 비어 있다면, 즉, 나누어 떨어지는 값이 없다면 -1을 추가합니다.

  • answer.empty(): answer 벡터가 비었는지 확인하는 STL 함수입니다.

마지막으로, 정답 벡터 answer를 반환합니다.

 

 

 

 

728x90
반응형