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

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

pseonu 2025. 1. 2. 19:53

[내일배움캠프 - 본캠프]

알고리즘 코드카타

 

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

 


16. 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

제한사항

  • x는 -10000000 이상, 10000000 이하인 정수입니다.
  • n은 1000 이하인 자연수입니다.
  •  
  •  

입출력 예

x n answer
2 5 [2,4,6,8,10]
4 3 [4,8,12]
-4 2 [-4,-8]

 

Solution

#include <string>
#include <vector>

using namespace std;

vector<long long> solution(int x, int n) {
    vector<long long> answer;
    for(int i =x; answer.size()<n;i+=x){
        answer.push_back(i);
    }
    return answer;
}

 

추가 설명

push_back() 함수를 이용해서 변수에 값을 추가할 수 있는데 이때 추가하는 값인 (i)를 n의 간격을 가진 일정한 수들로 지정하여 리스트를 생성함




17. 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다.

제한사항

  • n은 10,000,000,000이하인 자연수입니다.

입출력 예

n return
12345 [5,4,3,2,1]

 

Solution

#include <string>
#include <vector>

using namespace std;

vector<int> solution(long long n) {
    vector<int> answer;
    while(n>0){
        answer.push_back(n%10);
        n/=10;
    }
    return answer;
}

 

추가 설명

자연수 n을 10으로 나눠서 나온 나머지 (=맨 마지막 자릿수) 를 배열에 넣은 후 자연수 n을 10으로 나누어서 마지막 자리를 자르고 전 행동을 반복하면 맨 마지막 자릿수부터 한자리씩 배열에 넣을 수 있다.

 

 


18. 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요.

제한사항

  • s의 길이는 1 이상 5이하입니다.
  • s의 맨앞에는 부호(+, -)가 올 수 있습니다.
  • s는 부호와 숫자로만 이루어져있습니다.
  • s는 "0"으로 시작하지 않습니다.
  •  

입출력 예

예를 들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다.
str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다.

 

Solution

#include <string>
#include <vector>

using namespace std;

int solution(string s) {
    int answer = 0;
    answer=stoi(s);
    return answer;
}

 

추가 설명

stoi() 함수가 string to integer의 약자인 함수로 문자열을 정수로 변환해주는 함수이다.

 


17. 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다.
n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요.

제한사항

  • n은 1이상, 50000000000000 이하인 양의 정수입니다.

입출력 예

n return
121 144
3 -1

 

  • 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다.
  • 3은 양의정수의 제곱이 아니므로, -1을 리턴합니다.

 

Solution

#include <iostream>
#include <vector>

using namespace std;

long long solution(long long n) {
    long long x = 1; 
    while (x * x <= n) { 
        if (x * x == n) {
            return (x + 1) * (x + 1); 
        }
        x++;
    }
    
    return -1;
}

 

추가 설명

long long 변수인 x를 하나 선언하여 x의 제곱이 n과 같아질 때까지 반복문을 진행하여 같아졌을때 (x+1)의 제곱을 리턴한다. x의 제곱이 n 이상이 되었을 때도 제곱값이 n과 같은 수가 없다면 -1을 리턴한다. 

 

 


20. 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

제한사항

  • n은 1이상 8000000000 이하인 자연수입니다.

입출력 예

n return
118372 873211

 

Solution

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

using namespace std;

long long solution(long long n) {
    long long answer = 0;
    vector<int> v;
    
    while(n>0){
        v.push_back(n%10);
        n/=10;
    }
    
    sort(v.begin() , v.end() , greater<int>());
    
    for(int v : v){
        answer=answer*10 + v;
    }
    
    return answer;
}

 

추가 설명

n을 10으로 나눈 나머지 (=맨 마지막 자릿수)를 벡터 함수에 넣고 n을 10으로 나눈다(=마지막 자릿수 잘라냄) 이를 반복하여 각 자릿수를 벡터에 모두 넣은 후 sort 함수를 이용하여 정렬해준다. 이후 앞자리부터 10을 곱하면서 벡터값을 더해주면 처음 주어진 n의 자릿수와 동일하지만 숫자가 정렬된 answer가 만들어진다.