본문 바로가기

온라인 코딩/재귀 호출(Recursive Call)

[백준] 17269번 이름궁합 테스트

 

 

 

 

 

문제

 

 

 

소스코드

글자 크기 테스트

#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