문제
소스코드
글자 크기 테스트
#include<iostream>
#include<vector>
#include<map>
void RecursiveFun(std::vector<int>& v,int index);
int main() {
std::map<char, int>alphaList{
{'A',3},{'B',2},{'C',1},{'D',2},{'E',4},{'F',3},{'G',1},
{'H',3},{'I',1},{'J',1},{'K',3},{'L',1},{'M',3},{'N',2},
{'O',1},{'P',2},{'Q',2},{'R',2},{'S',1},{'T',2},{'U',1},
{'V',1},{'W',1},{'X',2},{'Y',2},{'Z',1}};
std::string left_name{};
std::string right_name{};
std::string merge_name{};
int N, M;
std::cin >> N >> M;
std::cin >> left_name >> right_name;
int left_index{}, right_index{};
bool shift = false;
while(true){
if (shift==false) {
if (left_name[left_index] == '\0') {
while(right_name[right_index]!='\0')
merge_name += right_name[right_index++];
break;
}
merge_name += left_name[left_index++];
}
else {
if (right_name[right_index] == '\0') {
while (left_name[left_index] != '\0')
merge_name += left_name[left_index++];
break;
}
merge_name += right_name[right_index++];
}
shift = true - shift;
}
//vector init
std::vector<int> v;
for (auto i : merge_name) {
v.emplace_back(alphaList[i]);
}
RecursiveFun(v,1);
}
void RecursiveFun(std::vector<int>& v,int index) {
if (v.size() - index == 1) {
std::cout << (v[0] * 10) + v[1]<<"% \n";
return;
}
for (int i = 0; i < v.size()-index; ++i) {
v[i] = (v[i] + v[i + 1])%10;
}
RecursiveFun(v, ++index);
}
후기
이 문제는 크게 3가지를 해결하는 문제이다.
1. 주어진 알파벳을 숫자로 변환
이 문제는 배열을 이용해서도 풀어도 가능하지만 map을 쓸 일이 거의 없다 보니 그냥 map으로 풀었다.
2. 주어진 문장 두개를 하나로 합치기
shift 변수를 하나 만들어서 번갈아가면서 저장할 수 있도록 진행하였고 둘 중 하나가 끝나면 나머지 문자도 넣도록 진행하였다.
3. 궁합 계산
아까 만든 map을 이용하여 vector에 숫자를 넣었으며 그 후에 재귀 함수를 이용해 값을 구할 때까지 반복하게 하였다.
재귀 함수를 사용했기 때문에 카테고리를 재귀 함수로 넣었다.
출처 및 레퍼런스
문제 링크:https://www.acmicpc.net/problem/17269
20.10.25
폰트 색상 및 가독성 수정
'온라인 코딩 > 재귀 호출(Recursive Call)' 카테고리의 다른 글
[백준] 10872번 팩토리얼 (0) | 2020.04.06 |
---|---|
[프로그래머스] 타겟 넘버 (0) | 2020.02.10 |
[백준] 1074번 Z (1) | 2020.01.11 |