본문 바로가기
Programming Solve/BOJ

BOJ 15312 이름 궁합 / C++

by msm1029 2021. 2. 11.
반응형

문제 링크 : www.acmicpc.net/problem/15312

 

15312번: 이름 궁합

영어 대문자 알파벳 26개의 획수는 순서대로 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 로 정한다. (출제자가 알파벳 대문자를 쓰는 방법이 기준이다)

www.acmicpc.net

안 푼 문제 랜덤으로 나온 문제이다. 브론즈2길래 그냥 풀어보았다

 

아이디어는 이렇다. 이름 A와 B는 같은 길이로 이루어져 있으므로 미리 ans(wer) 배열을 만들어놓고 주어진 알파벳 획수에 따라서 번갈아 집어넣는다.

 

예를 들어 입력 예시인 CJM / HER 일 경우, 획수로는 1 2 2 / 3 3 2이므로

ans 배열에는 1 3 2 3 2 2가 들어가게 된다.

 

이제 반복문 횟수를 아무 이름의 길이의 2배로 정해놓고 이름점을 보듯 더해가며 숫자 2개가 나올때까지 돌린다. 즉, loopCount = 2가 될 때까지 돌린다. 이 때 10이 넘는다면 10으로 나눈 나머지를 값에 저장해둔다.

 

마지막으로 ans 배열의 첫 번째, 두 번째 값을 출력해주면 된다.

 

 

 

<소스코드>

#include <iostream>
#include <string>
using namespace std;

int alphabetNum[26] = { 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2,
1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1 };
char alphabetChar[26] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };

int ans[4010] = { 0, };

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);

	string nameA;
	string nameB;

	cin >> nameA >> nameB;

	for (int i = 0; i < nameA.length(); i++) {
		for (int j = 0; j < 26; j++) {
			if (nameA[i] == alphabetChar[j]) {
				ans[i * 2] = alphabetNum[j];
			}
			if (nameB[i] == alphabetChar[j]) {
				ans[2 * i + 1] = alphabetNum[j];
			}
		}
	}

	int loopCount = nameA.length() * 2;
	while (loopCount > 2) {
		for (int i = 0; i < loopCount - 1; i++) {
			ans[i] += ans[i + 1];
			ans[i] %= 10;
		}
		loopCount--;
	}
	
	cout << ans[0] << ans[1];
}
반응형

'Programming Solve > BOJ' 카테고리의 다른 글

BOJ 20953 / C++  (0) 2021.03.02
BOJ 11558 The game of death / C++  (0) 2021.02.12
BOJ 2445 / C++  (0) 2021.02.07
BOJ 1475 (C++)  (0) 2020.12.01
BOJ 1912 (C++)  (0) 2020.11.29