아래 모든 문제들은 프로그래머스에서 제공 되는 문제를 이용하였습니다, 감사합니다.
정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.
#include
#include
#include
#include
using namespace std;
vector solution(vector numbers) {
vector answer;
for (int i = 0; i < (numbers.size() - 1); i++)
{
for (int j = i + 1; j < numbers.size(); j++)
{
answer.push_back(numbers[i] + numbers[j]);
}
}
sort(answer.begin(), answer.end());
int tmp = answer[0];
for (int i = 1; i < answer.size(); i++)
{
if (answer[i] == tmp)
{
answer.erase(answer.begin()+i);
i--;
}
else
tmp = answer[i];
}
return answer;
}
신규 유저가 입력한 아이디를 나타내는 new_id가 매개변수로 주어질 때, "네오"가 설계한 7단계의 처리 과정을 거친 후의 추천 아이디를 return 하도록 solution 함수를 완성해 주세요.
1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
2단계 newid에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(), 마침표(.)를 제외한 모든 문자를 제거합니다.
3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
7단계 new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
https://programmers.co.kr/learn/courses/30/lessons/72410 <-- 자세한 문제는 여기
#include
#include
using namespace std;
string solution(string new_id) {
string answer = "";
for (int i = 0; i < new_id.size(); i++)
{
if(new_id[i] >= 'A' && new_id[i] <= 'Z') // 1단계
{
new_id[i] = tolower(new_id[i]);
}
if(!isdigit(new_id[i]) && !isalpha(new_id[i]) // 2.단계
&& new_id[i] != '-' && new_id[i] != '_' && new_id[i] != '.')
{
new_id.erase(new_id.begin()+i);
i--;
}
else if(new_id[i] == '.')
{
if(i != 0 && new_id[i - 1] == '.')
{
new_id.erase(new_id.begin()+i);
i--;
}
}
}
if(new_id[0] == '.')
new_id.erase(new_id.begin() + 0);
if(new_id[new_id.size() - 1] == '.')
new_id.erase(new_id.begin() + (new_id.size() - 1));
if(new_id == "")
new_id += "a";
if(new_id.size() > 15)
new_id.erase(15);
if(new_id[0] == '.')
new_id.erase(new_id.begin() + 0);
if(new_id[new_id.size() - 1] == '.')
new_id.erase(new_id.begin() + (new_id.size() - 1));
int tmp = new_id.size() - 1;
for(int i = tmp; i < 2; i++)
{
new_id += new_id[tmp];
}
answer += new_id;
return answer;
}
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
#include
#include
#include
#include
using namespace std;
vector solution(vector array, vector> commands) {
vector answer;
vector tmp;
for (int i = 0; i < commands.size(); i++)
{
tmp.clear();
for (int j = commands[i][0] - 1; j < commands[i][1]; j++)
{
tmp.push_back(array[j]);
}
sort(tmp.begin(), tmp.end());
answer.push_back(tmp[commands[i][2] - 1]);
}
return answer;
}
2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까지 각각 SUN,MON,TUE,WED,THU,FRI,SAT 입니다. 예를 들어 a=5, b=24라면 5월 24일은 화요일이므로 문자열 "TUE"를 반환하세요.
#include
#include
using namespace std;
string solution(int a, int b) {
vector day = {"THU","FRI","SAT","SUN","MON","TUE","WED"};
vector month={0,31,29,31,30,31,30,31,31,30,31,30,31};
string answer = "";
int sum = b;
for(int i = 1; i <= a; i++)
sum += month[i - 1];
answer += day [sum % 7];
return answer;
}
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
s는 길이가 1 이상, 100이하인 스트링입니다.
#include
#include
using namespace std;
string solution(string s) {
string answer = "";
if (s.size() % 2 == 1)
answer += s[s.size()/2];
else
{
answer += s[s.size() / 2 - 1];
answer += s[s.size() / 2];
}
return answer;
}
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
#include
#include
#include
using namespace std;
vector solution(vector arr, int divisor) {
vector answer;
for (int i = 0; i < arr.size(); i++)
{
if (arr[i] % divisor == 0)
answer.push_back(arr[i]);
}
sort(answer.begin(),answer.end());
if (answer.size() == 0)
answer.push_back(-1);
return answer;
}
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
#include
#include
#include
#include
using namespace std;
bool compare2 (pair a, pair b)
{
if(a.second == b.second)
return a.first < b.first;
return a.second < b.second;
}
vector solution(vector strings, int n) {
vector> value;
vector answer;
for (int i = 0; i < strings.size(); i++)
{
value.push_back(make_pair(strings[i], strings[i][n]));
}
sort(value.begin(), value.end(), compare2);
// answer = strgins;
for (int i = 0; i < value.size(); i++)
{
answer.push_back(value[i].first);
}
std::cout << value[0].first << std::endl;
return answer;
}
주어지는 nums배열 중, nums.size()만큼 원소들을 고를 때 숫자들으 종류별로 가질수 있는 최대 값을 리턴하시오.
#include
#include
using namespace std;
int solution(vector nums)
{
int answer = 0;
set s;
for(int i = 0; i < nums.size(); i++)
{
s.insert(nums[i]);
}
if (s.size() > nums.size() / 2)
answer = nums.size() / 2;
else
answer = s.size();
return answer;
}
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.
#include
#include
#include
using namespace std;
bool compare(char a, char b)
{
return a > b;
}
string solution(string s) {
string answer = "";
sort(s.begin(), s.end(), compare);
answer += s;
return answer;
}
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
#include
#include
#include
using namespace std;
string solution(vector seoul) {
string answer = "김서방은 ";
answer += to_string((find(seoul.begin(), seoul.end(), "Kim") - seoul.begin()));
answer += "에 있다";
return answer;
}