문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
numer1 denom1 numer2 denom2 result
1 2 3 4 [5, 4]
9 2 1 3 [29, 6]
#include <vector>
using namespace std;
vector<int> solution(int numer1, int denom1, int numer2, int denom2) {
int ja = numer1*denom2 + denom1*numer2;
int mo = denom1*denom2;
vector<int> answer = {ja, mo};
for(int i = mo; i>1;i--)
{
if(ja%i==0 && mo%i==0)
{
answer.at(0)= (ja/i);
answer.at(1)= (mo/i);
break;
}
}
return answer;
}
첫째날에 분수 덧셈 문제를 풀어보려고 들어갔었는데 '분수를 풀어낼 때' 약분을 어떤식으로 해야할지 막막해서 문제를 뒤로 미뤘었다.
그리고 시간이 지나 4일차인 오늘 문제를 풀어보는데 그간 머리 로직을 정리해서 그런지 쉽게 문제를 풀 수 있었다. 이제는 vector를 사용하는 것이나 for문 조건을 바꿔서 설정하는 것이 어렵지 않게 되었다.
문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.
입출력 예
arr |divisor | return
[5, 9, 7, 10] | 5 | 5, 10
[2, 36, 1, 3] | 1 | [1, 2, 3, 36][3,2,6] | 10 | [-1]
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> solution(vector<int> arr, int divisor) {
vector<int> answer={};
for(auto i : arr)
{
if(i % divisor == 0)
{
answer.push_back(i);
}
}
if(answer.empty()==true) return {-1};
else sort(answer.begin(),answer.end());
return answer;
}
return answer.empty() ? vector<int>(1, -1) : answer;
문제 설명
어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
제한사항
absolutes의 길이는 1 이상 1,000 이하입니다.
absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
signs의 길이는 absolutes의 길이와 같습니다.
signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> absolutes, vector<bool> signs) {
int answer = 0;
for(int i = 0; i<absolutes.size();i++)
{
if(signs[i]==false) absolutes[i]*=-1;
answer+=absolutes[i];
}
return answer;
}
문제 설명
길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다.
제한 조건
n은 길이 10,000이하인 자연수입니다.
입출력 예
n return
3 "수박수"
4 "수박수박"
#include <string>
using namespace std;
string solution(int n) {
string answer = "";
string x = "수";
string y = "박";
for(int i = 1; i<=n;i++)
{
if(i&1) answer+=x;
else answer +=y;
}
return answer;
}
짝수를 구하는 코드에는 비트연산자를 사용하여 if(i&1)를 사용하는 것이 익숙해졌다.
i & 1 ? answer += "박" : answer += "수";
모든 것을 삼항연산자로 쉽게 가능할지 고민해봐야 할 것이다.