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

프로그래머스 C++ Level. 0 배열뒤집기

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

정수가 들어 있는 배열 num_list가 매개변수로 주어집니다. num_list의 원소의 순서를 거꾸로 뒤집은 배열을 return하도록 solution 함수를 완성해주세요.

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

using namespace std;

vector<int> solution(vector<int> num_list) {
    vector<int> answer;
    reverse(num_list.begin(), num_list.end());
    return num_list;
}

오리지널 C++을 배울 때 vector 자료형에 대해 배운적이 없어 당황스러웠던 문제이다.

처음에는 값을 어디 옮기고 값을 뒤집고 어떻게 저떻게 하려고 했지만 결국 검색의 힘을 빌렸다.

이렇게 공부하고, 새로운걸 하나씩 알아가는 것이지

 

reverse 함수를 사용해주었다.

reverse 함수를 사용하기 위해 #include <algorithm>을 추가해주었다.

배열의 시작 부분과, 끝 부분을 뒤집는다는 뜻으로 저렇게 사용하는 듯하다.

 

근데 공부하자는 차원에서reverse 함수가 아닌 다른 방법으로 해결할 수 있는 방법이 궁금했다.다른 배열 뒤집기에 대한 내용을 다룬 블로그에 의하면 풀 수는 있었지만 프로그래머스에서 제공하는 양식에 따라서 작성하기에는 어려움이 있었다.그래서 다른 사람들의 풀이를 한번 참고해보려고 했다. 근데 다들 나처럼 검색하고 풀었던걸까reverse 함수 , swap 함수 말고 !!! 날것의 풀이법을 찾는것이 쉽지 않았지만결국 찾아냈지!

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> num_list) {
    vector<int> answer;
    int temp=0;
    int len=num_list.size();
    for(int i=0;i<len;i++)
    {
        temp=num_list[len-i-1];
        answer.push_back(temp);
    }
    return answer;
}

temp 변수를 하나 만들고, 배열의 길이를 담을 변수 하나 만들어준 것 같다.

그리고...ㅔ.. push_back 함수를 사용하셨군.. 이것도 찾아봐야겠다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> num_list) {
    vector<int> answer = num_list;

    for(int i= 0; i< answer.size()/2; i++){
        int temp = answer[i];
        answer[i] = answer[answer.size()-i-1];
        answer[answer.size()-i-1] = temp;
    }
    return answer;
}

이 풀이법의 경우 answer변수에 배열 표기를 넣어주었다.

answer의 배열의 크기 값에 반복하는 횟수만큼 빼주는데, 거기에 1을 또 빼준다.

배열의 index는 1이 아닌 0부터 시작하기 때문에 배열의 크기보다 1이 작은 값으로 index에 넣어줘야한다.

index가 1이면 배열의 첫번째 값을 의미하는 것이 아니라 두 번째 값을 뜻하기 때문이다.

(어떤 이유에서인지 1을 한번 더 빼주는지 알겠는데, 말로 설명하려니 어려운 듯하다. 열심히, 정확하게 공부해야할 필요가 있다.)

temp값에 원래의 배열을 저장해주고, 원래의 배열( answer[i] )에 뒤집기 시킨 배열을 저장해준다.

그런다음 뒤집은 배열에 temp 배열을 다시 넣어준다.

 

값을 바꾼다. 라고 한다면 다른 제3의 변수에 값을 넣어주고 값을 차례로 바꿔가는 식으로 진행해줘야한다.

우리가 말하는 것처럼 그냥 휙 바꿀 수는 없다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> num_list) {
    int index = num_list.size();
    vector<int> answer(index);
    for(int i:num_list){
        index--;
        answer[index] = i;
    }
    return answer;
}

index 값을 변수로 잡았다

근데 저 : 연산자는 저기서 무슨 뜻인거지..! 얘도 찾아봐야겠다

728x90
반응형