[프로그래머스] 배열 두 배 만들기

김유원·2024년 1월 8일
0

📝24.01.08

🔗 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/120809?language=csharp

문제 설명

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

[C#] 내가 작성한 풀이

using System;

public class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[] {};
        
        answer = numbers;
        for(int i = 0; i < answer.Length; i++) {
            answer[i] *= 2;
        }
        
        return answer;
    }
}

[C#] 남이 작성한 풀이

1) Linq를 적절히 활용한 풀이

using System;
using System.Linq;
public class Solution {
    public int[] solution(int[] numbers) {

        int[] answer = numbers.Select(n => n * 2).ToArray();
        return answer;
    }
}

2) int[] 배열의 크기를 number.Length로 선언해준 응용법

-> 해당 방법으로 시도하였으나 실패했었다. 내 기억상으로는 number.Length 뒤에 {}를 지우지 않았어서 오류가 난 듯 하다.

using System;

public class Solution {
    public int[] solution(int[] numbers) {
        int[] answer = new int[numbers.Length];
        for(int i=0;i<numbers.Length;i++)
            answer[i] = numbers[i] * 2;
        return answer;
    }
}

[C++] 내가 작성한 풀이

#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;
}

[C++] 남이 작성한 풀이

1) 비트 연산자를 활용한 풀이
-> 비트연산자는 왼쪽으로 1칸씩 2배가 되고, 오른쪽으로 한칸씩 1/2배가 된다.

#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) numbers 배열 자체를 수정하여 반환

  • intint& 의 차이 : int 는 값을 반환하는 것이고 int&은 변수 그 자체를 반환하는 것이므로 auto& v가 아닌 auto v로 수정하면 2배한 값이 반환되지 않고 초기의 numbers가 반환됨
#include <string>
#include <vector>

using namespace std;

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

    return numbers;
}
profile
개발 공부 블로그

0개의 댓글

관련 채용 정보