아래 모든 문제들은 프로그래머스에서 제공 되는 문제를 이용하였습니다, 감사합니다.
JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.
#include <string>
#include <vector>
using namespace std;
string solution(string s) {
string answer = "";
for(int i = 0; i < s.size(); i++)
{
if('A' <= s[i] && s[i] <= 'Z')
s[i] = tolower(s[i]);
if(i > 0 && s[i - 1] == ' ')
if('a' <= s[i] && s[i] <= 'z')
s[i] = toupper(s[i]);
if(i == 0 && isalpha(s[i]))
s[i] = toupper(s[i]);
}
return answer = s;
}
두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int compare(const int *a, const int *b)
{
return *a > *b ? -1 : 1;
}
// arr_len은 배열 arr의 길이입니다.
int solution(int arr[], size_t arr_len) {
int answer = 0;
qsort(arr, arr_len, sizeof(int), compare);
int gop = arr[0];
int max = 1;
int tmp = 0;
int b;
for(int i = 0; i < arr_len - 1; i++)
{
b = arr[i + 1];
if(gop < arr[i+1])
{
tmp = gop;
gop = arr[i+1];
arr[i+1] = tmp;
}
max = gop;
while(arr[i+1] != 0)
{
tmp = max % arr[i + 1];
max = arr[i + 1];
arr[i + 1] = tmp;
}
gop = gop * b / max;
}
answer = gop;
return answer;
}
짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙입니다. 이 과정을 반복해서 문자열을 모두 제거한다면 짝지어 제거하기가 종료됩니다. 문자열 S가 주어졌을 때, 짝지어 제거하기를 성공적으로 수행할 수 있는지 반환하는 함수를 완성해 주세요. 성공적으로 수행할 수 있으면 1을, 아닐 경우 0을 리턴해주면 됩니다.
예를 들어, 문자열 S = baabaa 라면
b aa baa → bb aa → aa →
의 순서로 문자열을 모두 제거할 수 있으므로 1을 반환합니다.
#include <iostream>
#include<string>
#include<vector>
using namespace std;
int solution(string s)
{
int answer = 0;
vector<char> stack;
for(int i = 0; i < s.size(); i++)
{
if(stack.size() == 0)
stack.push_back(s[i]);
else
{
if(stack[stack.size() - 1] == s[i])
{
stack.pop_back();
}
else
stack.push_back(s[i]);
}
}
if(stack.size() == 0)
return 1;
return 0;
}