[프로그래머스 Level1] 월간 코드 챌린지

Wonjun·2022년 6월 22일
0
post-thumbnail

📝 내적

문제 설명

내적

해결 방법

두 1차원 정수 배열 a, b 각각의 동일한 인덱스의 요소의 곱을 구하고, 곱한 값을 전부 더해주면 된다

💻소스코드

#include <string>
#include <vector>

using namespace std;

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

📝 없는 숫자 더하기

문제 설명

없는 숫자 더하기

해결 방법

numbers 배열에 없는 0부터 9까지의 수를 더하면 된다. 제한 사항이 있기 때문에 없는 숫자를 찾아서 더하는 것보다 전체에서 있는 숫자를 빼는 것이 편하다고 생각했다. 0부터 9까지의 합인 45에서 numbers 배열에 있는 모든 요소를 뺐다.

💻소스코드

#include <string>
#include <vector>

using namespace std;

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

📝 나머지가 1이 되는 수 찾기

문제 설명

나머지가 1이 되는 수 찾기

해결 방법

2부터 시작해서 n-1까지 나눴을 때 나머지가 1이 되는 가장 작은 수를
answer에 할당하고 해당 반복문을 break하면 최솟값만 반환된다.

💻소스코드

#include <string>
#include <vector>

using namespace std;

int solution(int n) {
    int answer = 0;
    for(int i = 2; i < n; i++){
        if (n % i == 1){
            answer = i;
            break;
        } 
    }
    return answer;
}

📝 음양 더하기

문제 설명

음양 더하기

해결 방법

signs[i]가 true이면 absolute[i]가 양수라는 의미이므로 answer 변수에 더해주고, 아니라면 음수라는 의미이므로 answer에서 빼준다.

💻소스코드

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> absolutes, vector<bool> signs) {
    int answer = 0;
    for(int i = 0; i < absolutes.size(); i++){
        if (signs[i])
            answer += absolutes[i];
        else
            answer -= absolutes[i];
    }
    return answer;
}

📝 약수의 개수와 덧셈

문제 설명

약수의 개수와 덧셈

해결 방법

두 수 leftright를 포함한 사이의 모든 수를 확인해야 한다
각각의 수에 대해서 약수의 개수를 판단해야 하기 때문에 while문 안에
약수의 개수를 담을 cnt 와 약수인지 판별할 i 를 선언
약수의 개수가 짝수인 수는 더해주고, 홀수인 수는 뺀다

💻소스코드

#include <string>
#include <vector>

using namespace std;

int solution(int left, int right) {
    int answer = 0;
    while (left <= right){
        int cnt = 0;    // number of factors
        int i = 1;
        while (i <= left){
            if (left % i == 0)
                cnt++;
            i++;
        }
        if (cnt % 2 == 0)   // 약수의 개수가 짝수인 수는 더하고, 홀수인 수는 뺀다
            answer += left;
        else
            answer -= left;
        left++;
    }
    return answer;
}

📝 두 개 뽑아서 더하기

문제 설명

두 개 뽑아서 더하기

해결 방법

배열 내의 서로 다른 인덱스에 있는 모든 요소를 더하기 위해 이중 for문을 작성했다.
반환되는 배열에서 중복되는 수가 없기 때문에 find 함수를 써서 벡터 내에 요소가 존재하지 않는다면(겹치는 수가 없다면) push_back() 한다.
오름차순 정렬이 필요하므로 algorithm의 sort 함수를 사용해서 정렬을 해주었다.

💻소스코드

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

using namespace std;

vector<int> solution(vector<int> numbers) {
    vector<int> answer;
    for (int i = 0; i < numbers.size(); i++){
        for (int j = i + 1; j < numbers.size(); j++){
            if (find(answer.begin(), answer.end(), numbers[i] + numbers[j]) == answer.end())
                answer.push_back(numbers[i] + numbers[j]);
        }
    }
    sort(answer.begin(), answer.end());
    return answer;
}

profile
알고리즘

0개의 댓글