문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • 1 ≤ numbers의 길이 ≤ 9
  • 0 ≤ numbers의 모든 수 ≤ 9
  • numbers의 모든 수는 서로 다릅니다.

 

입출력 예

[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

코드#1

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

코드#2

#include <algorithm>

int solution(vector<int> numbers) {
    int answer = 0;
    
    for(int i = 0; i < 10; i++)
    {
        if(find(numbers.begin(),numbers.end(),i)==numbers.end()) answer+=i;
    }
    
    return answer;
}
더보기

<algorithm> 인클루드

* InputIterator find(InputIterator first, InputIterator last, const T& val);

: 범위 안 (first부터 last전 까지)의 원소들 중 val와 일치하는 첫번째 원소를 가리키는 반복자를 리턴한다.

  만일 일치하는 원소를 찾지 못할 경우 last를 리턴한다.

 

문제 설명

주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구하려고 합니다. 숫자들이 들어있는 배열 nums가 매개변수로 주어질 때, nums에 있는 숫자들 중 서로 다른 3개를 골라 더했을 때 소수가 되는 경우의 개수를 return 하도록 solution 함수를 완성해주세요.

 

제한사항

  • nums에 들어있는 숫자의 개수는 3개 이상 50개 이하입니다.

nums의 각 원소는 1 이상 1,000 이하의 자연수이며, 중복된 숫자가 들어있지 않습니다.

 

입출력 예

[1,2,3,4] 1
[1,2,7,6,4] 4

코드

bool isPrime(int num)
{
    if(num==0 || num==1) return false;
    
    for(int i = 2; i<num/2; i++)
    {
        if(num%i == 0) return false;
    }
    return true;
}

int solution(vector<int> nums) {
    int answer = 0;
    int size = nums.size();
    
    for(int i = 0; i<size-2; i++)
    {
        for(int j = i+1; j<size-1; j++)
        {
            for(int k = j+1; k<size; k++)
            {
                if(isPrime(nums[i]+nums[j]+nums[k])) answer++;
            }
        }
    }
    
    return answer;
}

문제 설명

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

 

제한사항

  • 3 ≤ n ≤ 1,000,000

입출력 예

10 3
12 11

코드

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

 

 

문제 설명

새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.
놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요.
단, 금액이 부족하지 않으면 0을 return 하세요.

 

제한사항

  • 놀이기구의 이용료 price : 1 ≤ price ≤ 2,500, price는 자연수
  • 처음 가지고 있던 금액 money : 1 ≤ money ≤ 1,000,000,000, money는 자연수
  • 놀이기구의 이용 횟수 count : 1 ≤ count ≤ 2,500, count는 자연수

입출력 예

3 20 4 10

 

입출력 예 설명

이용금액이 3인 놀이기구를 4번 타고 싶은 고객이 현재 가진 금액이 20이라면, 총 필요한 놀이기구의 이용 금액은 30 (= 3+6+9+12) 이 되어 10만큼 부족하므로 10을 return 합니다.


코드

long long solution(int price, int money, int count)
{
    long long answer = 0;
    long long total = 0;
    
    for(int i = 1; i<=count; i++)
    {
        total += price*i;
    }
    
    answer = total - money;
    
    if(answer < 0) answer = 0;

    return answer;
}

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

 

재한사항

  • s는 길이가 1 이상, 100이하인 스트링입니다.

입출력 예

"abcde" "c"
"qwer" "we"

코드

string solution(string s) {
    string answer = "";
    int size = s.size();
    
    if(size%2==0)
    {
        answer = s.substr(size/2-1, 2);
    }
    else
    {
        answer = s[size/2];
    }
    
    return answer;
}

문제 설명

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

제한 조건

  • a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
  • a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
  • a와 b의 대소관계는 정해져있지 않습니다.

입출력 예

3 5 12
3 3 3
5 3 12

코드

long long solution(int a, int b) {
    long long answer = 0;
    int dump;
    
    if(a==b) return a;
    
    if(a > b)
    {
        dump = b;
        b = a;
        a = dump;
    }
    
    for(int i = a; i<=b; i++)
    {
        answer += i;
    }
    
    return answer;
}

문제 설명

문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

 

제한 사항

  • str은 길이 1 이상인 문자열입니다.

입출력 예

"Zbcdefg" "gfedcbZ"

코드#1

string solution(string s) 
{
    char dump ;

    int size = s.size();

    for (int i = 0; i < size; i++)
    {
        for (int j = i+1; j < size; j++)
        {
            if (s[i] < s[j])
            {
                dump = s[i];
                s[i] = s[j];
                s[j] = dump;
            }
        }
    }
    return s;
}

코드#2

#include <algorithm>

using namespace std;

string solution(string s) 
{
    sort(s.begin(),s.end(), greater<char>());

    return s;
}
더보기

#include <algorithm> 헤더파일 추가

 

배열(arr), vector(v)

  1. sort(arr, arr + n);                                                             // 배열에서 사용 (시작점 주소, 마지막 주소 + 1)
  2. sort(v.begin(), v. end()); [less<자료형>() 생략]     // 오름차순 정렬 (default = Ascending order)
  3. sort(v.begin(), v. end(), greater<자료형>());         // 내림차순 정렬 (Descending order)
  4. sort(v.begin(), v. end(), compare);                          // 사용자 정의 함수 compare

문제 설명

문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.

 

제한 사항

  • s는 길이 1 이상, 길이 8 이하인 문자열입니다.

입출력 예

"a234" false
"1234" true

코드

bool solution(string s) {
    int size = s.size();
    
    if(size!=4 && size!=6)           return false;
    
    for(int i=0; i<size; i++)
    {
        if(s[i] < '0' || s[i] > '9') return false;    
    }
    
    return true;
}

+ Recent posts