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

프로그래머스 C++ Level. 0 배열 두 배 만들기

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

정수 배열 numbers가 매개변수로 주어집니다. numbers의 각 원소에 두배한 원소를 가진 배열을 return하도록 solution 함수를 완성해주세요.

#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
        
    for(int i = 0; i <= sizeof(numbers) / sizeof(int); i++){
        numbers[i] *= 2;
    }
    return numbers;
}

처음엔 이렇게 작성하고 코드를 실행했을 때 2개의 케이스 다 통과했다.

근데 채점하고 보니 틀렸다고 떴다. 이럴 때 너무하다.. 

결국 고민하다가 일단 정답이라고 적혀있던 push_back을 사용한 식을 복사하여 넣었다.

분하다... push_back 말고 정석적인 느낌을 사용해보고싶었다.

그래도 새로운 것 하나 배웠다고 생각하고 하기로 했다..후...

정말 끝이 없다

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    
    for(int i=0; i<numbers.size(); i++)
            answer.push_back(numbers[i]*2);
            
    return answer;
}

구글링 하여 얻은 답변..

열심히 검색해보았지만 대부분 검색 결과로 뜨는건 java script를 사용한 풀이들이었고, c++은 정말 찾기 힘들었다.

그래도 push_back은 앞전의 프로그래머스 다른 사람들의 풀이에서도 정말 많이 등장했었다.

역시 공부하는 것이 맞는 것 같다.


다른 분들의 풀이

#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
    for(int i=0; i<numbers.size(); i++)
        numbers[i] = numbers[i] << 1;
    return numbers;
}

비트연산을 사용해 2씩 곱해준 풀이도 있었다

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
    for(auto& v : numbers)
    {
        v *=2;
    }

    return numbers;
}

for문을 이렇게 사용하시는 분들도 있었다. 저 연산 방법도 필히 공부해야겠다

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    for (int i = 0; i < numbers.size(); i++) {
        numbers[i] *= 2;
    }
    answer = numbers;
    return answer;
}

야,,,! 비슷하잖아...!! 내가 쓴게 저거랑 똑같지 않냐구....

나 분명 저렇게도 썼던것 같은데.. 모르겠다.. 너무 많이 시도해봐서 기억도 안나...

다른 풀이들도 찾아보고있지만 다들 numbers.size() 이렇게 작성하셨다. 배열의 갯수를 구할 때는 배열 전체에서 나눠야한다고 생각했는데 그냥 size() 이렇게 사용해야되나보다. 그렇다면 sizeof()랑 뭔차이가 있길래 sizeof() 이렇게 단독으로 쓰면 안되었던걸까..

반복문에 numbers.size() 이부분 나는 sizeof(numbers) / sizeof(int) 이렇게 적었다.

이제 알았으니 다음부터 참고하면 된다.

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer=numbers;
    int n_size=numbers.size();
    for(int i=0;i<n_size;i++)
    {
        answer[i]=2*numbers[i];
    }
    return answer;
}

이렇게 변수를 따로 생성하여 풀어나가는 방법도 있다

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    for(int i=0;i<numbers.size();i++)
    {
        numbers[i]*=2;
        answer.push_back(numbers[i]);
    }
    return answer;
}

push_back을 사용하는 방법 또 하나 가져와봤다.

push_back이 뭐길래 이 문제에서 이렇게들 많이 사용하신걸까..

 

그냥 바로 알아보자

열심히 검색해보았는데, 여기에서의 설명이 이해가 잘 되었다.

궁금했던 vector 부분까지 잘 읽어볼 수 있었다

https://novlog.tistory.com/entry/C-STL-Vector-Container-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95-%EA%B4%80%EB%A0%A8-%EC%98%88%EC%A0%9C-%EC%B4%9D-%EC%A0%95%EB%A6%AC-%EB%AF%B8%EC%99%84%EC%84%B1

 

[C++ STL] Vector Container 사용 방법 & 관련 예제 총 정리

*개인적인 공부 내용을 기록하는 용도로 작성한 글 이기에 잘못된 내용을 포함하고 있을 수 있습니다. #1 About Vector Container #2 Vector 사용방법 - 사전 작업 - Vector 선언 및 초기화 - Vector 값 추가 (push

novlog.tistory.com

아래의 내용은 위 링크의 글을 아주 간단하게 용도나/ 뜻 정도만 뽑아왔다

 

1. Vector 사용 방법

- #include <vector> 헤더파일 추가

- using namespace std; 추가

- 선언하기 : vector <[data type]> name;

   ex) vector<int> v;

2. Vector값 추가, 삭제

1) push_back(value) : 맨 끝에 추가

2) insert(삽입위치, value) : 중간 삽입

    - 삽입위치에 value를 삽입한다

    - v.begin(), 100 : 시작 위치에 100 삽입

    - v.begin() + 2, 101 : 시작 위치 + 2에 101 삽

3) pop_back() : 맨 끝 값 삭제

4) erase(삭제위치) : 중간 삭제

5) erase(first, end) : first와 end범위의 값 삭제

 

3. Vector 원소 위치 변경

1) iter_swap : vector 내부 원소의 위치를 변경할 수 있다

   - iter_swap(v.begin(), v.begin() + 4);

     12345  -> 52341 (1, 5가 바뀌었다)

 

4. size(), max_size(), capacity(), resize(), reserve()

1) size() : 컨테이너에 저장된 원소의 개수

2) max_size() : 컨테이너가 담을 수 있는 최대 원소의 개수

3) capacity() : 실제로 할당된 메모리 공간의 크기

4) resize() : 컨테이너의 size를 변경할 수 있다

   - resize() 멤버함수로 size를 줄여도 capacity가 줄지 않는다

5) reserve() : 미리 capacity를 결정할 수 있다

    - 재할당에 드는 비용을 조금 축소할 수 있다

 

5. 원소 접근 : 임의 위치의 원소르 참조할 수 있도록 제공한

1) [] 연산자 : 괄호 안에 탐색하려는 인덱스 적으면 된다

    - 속도는 빠르지만 에러 발생의 가능성

    - 항상 범위에서 벗어나지 않았는지 체크해야한다

2) at() : index 위치의 문자 반환한다. 유효한 범위인지 체크해준다

    - 범위 점검을 수행하여 속도는 느리지만 안전하다

 

<string을 사용하는 멤버함수와 관련한 보완 부분>

 at() 함수 부분에 조금 이해가 되지 않아 다 궁금하여 검색해본 결과

이 블로그를 찾을 수 있었다

https://rebro.kr/53

 

 

[C++] string (문자열) 클래스 정리 및 사용법과 응용

[목차] 1. string 클래스란? 2. string 클래스의 입출력 3. string 클래스 생성 4. string 클래스 연산자 활용 5. string 클래스의 멤버 함수 6. string 클래스의 멤버 함수 사용 예시 1. string 클래스란? - C++ STL에

rebro.kr

https://pledge.tistory.com/entry/c-string-%EC%82%AC%EC%9A%A9-%EB%A9%A4%EB%B2%84%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC

 

c++ string 사용 멤버함수 정리!

/* string 사용하기 생성 1 : string str("abcdefg"); --> 바로 생성하기 생성 2: string str1; str1 = "abcdefg"; --> string 선언 후 값 주기 ※ string 을 다루는 클래스로 C 에서의 char와는 또 다르다. 문자열 긑에 null 이

pledge.tistory.com

 

 

728x90
반응형