The observed PIN (4 kyu)
https://www.codewars.com/kata/5263c6999e0f40dee200059d
4규 문제이기는 하지만, 체감 상으로는 6규 정도되는 문제로 보임.
아래와 같이, 숫자가 배치되어 있고 하나의 숫자를 선택했을 때, 선택된 위치를 기준으로 상하좌우의 십자방향으로 숫자를 관찰할 수 있다고 가정 함.
예를 들어 1을 선택하면, 1과 우측의 2, 하단의 4를 관찰할 수 있고, 5를 선택하면, 2, 4, 5, 6, 8을 관찰할 수 있도고 함.
┌───┬───┬───┐
│ 1 │ 2 │ 3 │
├───┼───┼───┤
│ 4 │ 5 │ 6 │
├───┼───┼───┤
│ 7 │ 8 │ 9 │
└───┼───┼───┘
│ 0 │
└───┘
복 수의 숫자가 입력되었을 때, 관찰된 숫자로부터 가능한 모든 조합을 찾아내는 문제임.
아래와 같이 답을 작성함.
먼저 get_pins
메소드에서
std::vector<std::vector<std::string>>
형태로
숫자를 선택했을 때, 가능한 조합을 vector형태로 가져오게 함.
그리고 combination
이라는 메소드를 만들어,
2개의 숫자로부터 가능한 조합 vector 2개를 입력받아, 합치게 함.
#include <string>
#include <vector>
std::vector<std::string> combination(const std::vector<std::string> &lhs, const std::vector<std::string> &rhs)
{
std::vector<std::string> ret;
for (int l = 0; l < lhs.size(); ++l)
{
for (int r = 0; r < rhs.size(); ++r)
{
ret.push_back(lhs[l] + rhs[r]);
}
}
return ret;
}
std::vector<std::string> get_pins(std::string observed)
{
if (observed.size() == 0)
return {};
std::vector<std::vector<std::string>> pattern = {
{"0", "8"},
{"1", "2", "4"},
{"1", "2", "3", "5"},
{"2", "3", "6"},
{"1", "4", "5", "7"},
{"2", "4", "5", "6", "8"},
{"3", "5", "6", "9"},
{"4", "7", "8"},
{"0", "5", "7", "8", "9"},
{"6", "8", "9"}};
std::vector<std::string> ret = pattern[observed[0] - '0'];
for (int s = 1; s < observed.size(); ++s)
{
int num = observed[s] - '0';
ret = combination(ret, pattern[num]);
}
return ret;
}
int main()
{
std::vector<std::string> output = get_pins("369");
return 0;
}
오류없이 한번에 통과한 특이한 문제였음.
Author And Source
이 문제에 관하여(The observed PIN (4 kyu)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mir21c/The-observed-PIN-4-kyu저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)