본문 바로가기
프로그래머스 C++/Level.1

프로그래머스 Level.1 자연수 뒤집어 배열로 만들기

by yeni_0224 2023. 7. 10.
728x90
반응형

당황스럽다. 이렇게 비어있는데 질문이 47개나 적혀있다는 것....

https://hwan-shell.tistory.com/119

 

C++ vector사용법 및 설명 (장&단점)

C++의 vector는 C++ 표준라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 사용하기 편하게 정의된 class를 말합니다. vector를 생성하면 메모리 heap에 생성되며 동적할당됩니다. 물론 속도

hwan-shell.tistory.com

https://www.delftstack.com/ko/howto/cpp/how-to-convert-vector-to-array-in-cpp/

 

C++에서 벡터를 배열로 변환하는 방법

이 기사에서는 C++에서 벡터를 배열로 변환하는 방법을 소개합니다.

www.delftstack.com

반응형
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(long long n) {
    vector<int> answer;
    string a = to_string(n);
    for(int i = a.size() - 1; i >= 0; i--){
        answer.push_back(a[i] - '0');
    }
    return answer;
}
728x90

push_back 함수를 사용하고자 했는데 #include에 뭘 넣어야하는지 찾으러 돌아다녔다.

string형 변수를 사용해 n의 숫자를 배열로 변환한 뒤

반복문을 사용해 거꾸로 값을 넣어주었다. 항상 push_back 함수를 사용했기에 push_front를 사용해주려 했지만 그 마저도 어떤 stl 넣어야했는지 찾아야했다. 그래서 일단 push_back 함수를 사용해주었다.

push_back 사용할 때 일단 #include <algorithm>을 추가하고 보자

주어진 숫자의 역순으로 넣어야했기 때문에 평소에 사용하는 ++ 반복문이 아닌 큰 인덱스값부터 넣어주는 -- 반복문을 사용하여 값을 넣어주었다. 그리고 push_back 하면서 '0' 도 하나 빼주었다. 

아스키코드의 건이었다.

 

answer 은 vector 형의 배열에 배열의 원소는 int 형이라는 뜻 

string 형의 배열을 char형의 answer에 넣어주려면 '0'을 빼야한다고 한다

0의 아스키 코드는 48이다.

 48을 빼줄 수도 있지만 우리가 아스키코드를 다 외울 수 없으니 '0' 을 하나 빼주는 것이다.

황금같은 설명을 해주신 갓 팀원에게 감사를... ㅠㅠㅠ

다른 풀이법을 찾아보니 %값을 활용해서 나머지 값을 배열에 넣어주는 방법을 정말 많이 사용한 듯 하다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(long long n) {
    vector<int> answer;
    while(n){
        answer.push_back(n%10);
        n/=10;
    }
    return answer;
}

n이 0일 경우엔 어떡하나 봤더니 n은 자연수라고 제한되어있었다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(long long n) {
    vector<int> answer;

    while (true)
    {
        answer.push_back(n%10);
        n /= 10;

        if (n == 0)
            break;
    }

    return answer;
}

이렇게 n이 0일 경우의 조건도 달아주어 작성한 분들도 계셨다.

#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
using namespace std;

vector<int> solution(long long n) {
   vector<int> answer;
    stringstream ss;
    ss << n;
    string str = ss.str();
    int strLength = str.length();

    for (int i = 0; i < strLength; i++)
    {
        answer.push_back(atoi(str.substr(i, 1).c_str() ) );
    }

    std::reverse(answer.begin(), answer.end());
    return answer;
}

atoi 도 사용하고자 했으나 역시 어떤 stl 추가해야하나 했다아 그렇게 평소에 algorithm 추가하면서 문제 풀었으면서 막상 문제 풀 때 잊어버리는 매직. 이젠 잊어버리지 않는다.

728x90
반응형