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

프로그래머스 C++ Level. 0 배열 자르기

by yeni_0224 2023. 4. 27.
728x90
반응형

정수 배열 numbers와 정수 num1num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers, int num1, int num2) {
    vector<int> answer;
    for(int i = 0 ; i <= num2 - num1; i++){
        answer.push_back(numbers[i + num1]);
    }
    return answer;
}

이번에는 이전 게시글들에 꽤 등장했었던 push_back 함수를 이용해서 풀었다.

잘린 배열의 범위를 어떻게 생각해내는지가 첫번째 관건이었던 것 같다.

이 문제를 보고 이건 무조건 push_back을 써야겠구나 생각이 들었다.

그래서 일단은 반복적으로 배열의 값들을 출력해줘야했기 때문에

반복하는 횟수를 num2 에서 num1을 빼준 값으로 지정해주었다.

 

그 다음 이 잘린 범위를 어떻게 표현할것인가가 문제였는데

지금 와서 작성된 코드를 보니 너무 단순해보인다. 직접 생각해내는 과정이 꼭 필요하고 중요한 것 같다.

 잘린 범위가 시작되는 지점은 index num1 부터이고, num1부터 하나씩 더해져

num2에 도달할 때까지의 값들을 출력해야하는 것이다.

그렇다면 반복하는 횟수에 num1을 더해준 인덱스 값부터

answer 배열에 넣어주면 되는 것이다!

 

(줄 넘김은 내가 생각했던 단계 하나씩 잘라서 정리한 것)

(값을 집어넣을 배열) . push_back (어떤 값들을 넣어줄 것인가);

이 양식을 기억하자!

 

다른 사람들의 풀이

#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers, int num1, int num2) {
    vector<int> answer;
    for(int i=num1; i<=num2; i++)
        answer.push_back(numbers[i]);
    return answer;
}

애초에 for문을 돌리면서 아예 i에 num1을 집어넣어서

push_back 함수엔 깔끔하게 i만 넣을 수 있도록 한 것같다. 흥미돋

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers, int num1, int num2) {
    vector<int> answer;
    for(int i = num1;i <= num2;++i)
    {
        answer.emplace_back(numbers[i]);
    }
    return answer;
}

새로운 함수 emplace_back을 발견했다.

약간 포켓몬 도감처럼 하나씩 함수가 모이는 느낌이 든다.

 

emplace는 설치하다는 뜻이며, 이 블로그를 통해 알아보자 :)

세상의 지니어스 여러분들 감사하무니..👏👏

https://openmynotepad.tistory.com/10

 

emplace_back 과 push_back 의 차이

item 타입의 생성자가 타입을 인자로 받는다면? push_back 함수는 '객체' 를 집어 넣는 형식으로, 객체가 없이 삽입을 하려면 "임시객체 (rvalue) " 가 있어야 합니다. 또는 암시적 형변환이 가능하다면,

openmynotepad.tistory.com

 

728x90
반응형