내일배움캠프🔥/알고리즘 코드카타💬

[ 내일배움캠프 ] 알고리즘 코드 카타 11~15 💬

pseonu 2024. 12. 26. 20:05

[내일배움캠프 - 사전캠프]

알고리즘 코드카타

 

❤️‍🔥Algorithm Code Kata 
 
코딩에 더 익숙해지기 위해, 내일배움캠프는 매일 아침 알고리즘 코드카타 시간을 가집니다. 
반복되는 연습이라는 뜻을 가진 `Kata`를 통해 매일 아침 코딩을 훈련해봅시다. 

 


11. 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요.

제한사항

  • num은 int 범위의 정수입니다.
  • 0은 짝수입니다.
  •  

입출력 예

num1 return
3 "Odd"
4 "Even"

 

Solution

#include <string>
#include <vector>

using namespace std;

string solution(int num) {
    string answer = "";
    if(num%2==0){
        answer="Even" ; 
    }
    else answer="Odd";
    return answer;
}

 

추가 설명

num을 2로 나누었을때 나머지가 0일 경우 짝수이므로 이를 이용해서 짝수인지 홀수인지 구분할 수 있음.


12. 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요.

제한사항

    • arr은 길이 1 이상, 100 이하인 배열입니다.
    • arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.

입출력 예

arr return
[1,2,3,4] 2.5
[5.5] 5

 

Solution

#include <string>
#include <vector>

using namespace std;

double solution(vector<int> arr) {
    double answer = 0;
    for(int i=0;i<arr.size();i++){
        answer+=arr[i];
    }
    return answer/arr.size();
}

 

추가 설명

answer에 arr의 원소값들을 모두 더하고 그걸 arr.size() (원소의 총 갯수)로 나눠서 리턴


13. 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항

  • N의 범위 : 100,000,000 이하의 자연수

입출력 예

N answer
123 6
987 24

 

입출력 예 설명

#1

  • 문제의 예시와 같습니다.

#2

  • 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다.

 

Solution

#include <iostream>

using namespace std;
int solution(int n)
{
    int answer = 0;

    while(n > 0){
        answer += n%10;
        n/=10;
    }
        
    return answer;
}

 

추가 설명

n을 10으로 나누었을때 나머지인 맨 마지막 자릿수를 answer에 더한다. 이후 n/=10을 통해 맨 마지막 자릿수를 잘라내고 반복하여 끝자리부터 차근차근 더해간다.


14. 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한사항

  • n은 0 이상 3000이하인 정수입니다.

입출력 예

n return
12 28
5 6

 

입출력 예 설명

#1

  • 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.

#2

  • 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.

Solution

#include <string>
#include <vector>

using namespace std;

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

 

추가 설명

i를 0부터 n까지 더해가면서 나누었을때 나누어 떨어지는지 확인한다. 나누어 떨어지면 그때 i는 n의 약수이므로 answer에 더해준다.


15. 자연수 n이 매개변수로 주어집니다. n x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.

제한사항

  • 3 ≤ n ≤ 1,000,000

입출력 예

n return
10 3
12 11

 

입출력 예 설명

#1

  • 10을 3으로 나눈 나머지가 1이고, 3보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 3을 return 해야 합니다.

#2

  • 12를 11로 나눈 나머지가 1이고, 11보다 작은 자연수 중에서 문제의 조건을 만족하는 수가 없으므로, 11을 return 해야 합니다.

Solution

#include <string>
#include <vector>

using namespace std;

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

추가 설명