해결방법
vector를 통해서 색조합을 만들어 준다. 여기서 중요한 점은 예를 들어 부모가 각각 갈검, 흰보 조합이라면 갈갈, 갈검, 갈흰, 갈보 등등...의 조합이 나올 수 있다는 것이다. 즉, 몸통, 꼬리 구분 없이 최대 16가지 조합이 나온다는 것이다.
따라서 우리가 해야 하는 일은 범위 기반 for루프를 통해 조합 가능한 모든 경우의 수를 pair 쌍으로 저장해주고, sort를 통해 사전순으로 정렬하고, unique를 사용해서 중복되는 경우의 수를 제거해주는 것이다.
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string body1, tail1, body2, tail2;
cin >> body1 >> tail1;
cin >> body2 >> tail2;
vector<string> bodycolor = { body1, tail1, body2, tail2 };
vector<string> tailcolor = { body1, tail1, body2, tail2 };
vector<pair<string, string>> output;
for (const string& body : bodycolor)
{
for (const string& tail : tailcolor)
{
output.push_back({ body, tail });
}
}
sort(output.begin(), output.end());
output.erase(unique(output.begin(), output.end()), output.end());
for (const auto& color : output)
{
cout << color.first << " " << color.second << endl;
}
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 네 번째 점 3009 (0) | 2024.12.15 |
---|---|
BOJ - 수 정렬하기 3 10989 (0) | 2024.12.15 |
BOJ - 준살 프로그래밍 대회 7513 (3) | 2024.12.13 |
BOJ - 좌표 정렬하기 11650 (0) | 2024.12.13 |
BOJ - 설탕 배달 2839 (0) | 2024.12.13 |