본문 바로가기
Computer Science/Programmers

[프로그래머스] 배열 만들기 2 C++

by 기억보다 기록을 2023. 5. 19.
반응형

문제 내용, 입출력 예시


 

 

정수 lr이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 "0"과 "5"로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.
제한사항
1 ≤ l ≤ r ≤ 1,000,000


입출력 예시

5 이상 555 이하의 0과 5로만 이루어진 정수는 작은 수부터 5, 50, 55, 500, 505, 550, 555가 있습니다. 따라서 [5, 50, 55, 500, 505, 550, 555]를 return 합니다.

따라서 10 이상 20 이하이면서 0과 5로만 이루어진 정수는 없습니다. 따라서 [-1]을 return 합니다.

l r result
 5  555 [5, 50, 55, 500, 505, 550, 555]
 10  20  [-1]

 

 


 

 

문제 해결, 소스 코드 설명


제일 간단한 방법으로 반복문 사용해서 l 과 r 사이 모든 자료들 베열로 담아서, 슷자 아닌 문자로 바꿉니다.
따라서 문자 중에 ''0" 과 "5" 가 포함되는 원소만 출력하고 빈 배열이면 " -1" 를 담아줍니다. 시작 소스 코드 다음과 같습니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int l, int r) {
    
    vector<int> answer;
    
    return answer;
}

 

반복문으로 먼저 모든 원소들 배열도 담고 모든 원소의 문자로 바꿔준 tmp 변수를 만듭니다. tmp 문자 배열 안에 "0" 과 "5" 동시에 없으면 제외하고 break으로 사용합니다. 
for(int i = l;  i <= r; i++) {
        
        string tmp = to_string(i);
        bool isIncluded = true;
        
        for(char c : tmp){
            if(c!= '0' && c!= '5'){
                isIncluded = false;
                break;
            }
        }
}

 

주어진 코드 조각은 조건문 isIncluded를 확인하고, 조건이 참인 경우 중괄호 내의 코드 블록을 실행하는 것입니다. 이 경우, 변수 i의 값을 answer 벡터에 push_back 함수를 사용하여 추가합니다.

추가적으로 push_back은 C++의 벡터(vector) 컨테이너에서 사용되는 함수로, 벡터의 끝에 새로운 요소를 추가하는 역할을 합니다. push_back 함수는 벡터의 크기를 동적으로 관리하며, 요소를 추가할 때마다 벡터의 크기가 자동으로 조정됩니다.
 if(isIncluded){
    answer.push_back(i);
 }

 

다음 코드 조각은 answer 벡터가 비어있는지 확인하고, 비어있는 경우 -1을 answer 벡터에 추가하는 것입니다.

두 가지 조건문은 동일한 결과를 얻기 위해 사용될 수 있습니다. answer.empty()는 answer 벡터가 비어있는지 확인하는 함수이며, answer.size() == 0은 answer 벡터의 크기가 0인지 확인하는 조건입니다. 둘 다 true인 경우, answer 벡터에 -1을 추가합니다.
if(answer.empty()){
     answer.push_back(-1);
}

OR

if(answer.size() == 0){
     answer.push_back(-1);
}

 


 

 전체 소스 코드


따라서  전체 소스 코드는 다음과 같습니다.
#include <string>
#include <vector>

using namespace std;

vector<int> solution(int l, int r)
{
    vector<int> answer;

    for (int i = l; i <= r; i++)
    {

        string tmp = to_string(i);
        bool isIncluded = true;

        for (char c : tmp)
        {
            if (c != '0' && c != '5')
            {
                isIncluded = false;
                break;
            }
        }

        if (isIncluded)
        {
            answer.push_back(i);
        }
    }

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

    return answer;
}

 


 

반응형