아래 모든 문제들은 프로그래머스에서 제공 되는 문제를 이용하였습니다, 감사합니다.
무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다.
예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없습니다.
구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 합니다.
사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 작성해주세요.
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool compare (int a, int b)
{
return a > b;
}
int solution(vector<int> people, int limit) {
int answer = 0;
int aa = 0;
sort(people.begin(), people.end(), compare);
for (int i = 0; i < people.size(); i++)
{
if (people[i] == -1)
continue;
else if ((people[i] + people[(people.size() - aa - 1)]) <= limit)
{
people[(people.size() - aa - 1)] = -1;
aa++;
}
answer += 1;
}
return answer;
}
스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다.
예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다.
스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요.
#include <string>
#include <vector>
#include <iostream>
#include <map>
using namespace std;
int solution(vector<vector<string>> clothes) {
int answer = 1;
map<string, int> um;
// um[au[1]] = 0;
for (auto au : clothes)
{
um[au[1]]++;
// um[au[1]] = um[au[1]] + 1;
}
for (auto au : um)
{
answer *= au.second + 1;
}
return answer - 1;
}
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
vector<int> solution(int brown, int yellow) {
vector<int> answer;
vector<int> value;
for (int i = 1; i * i <= yellow; i++)
{
if(yellow % i == 0)
value.push_back(i);
}
for (int j = 0; j < value.size(); j++)
{
if (brown == (value[j] * 2) + 2 * ((yellow / value[j]) + 2))
{
answer.push_back((yellow / value[j]) + 2);
answer.push_back(value[j] + 2);
break;
}
}
return answer;
}