Koder / 박성훈
article thumbnail

https://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

구현 문제.

두 이름의 길이가 같음이 보장되기 때문에, 상대적으로 쉽게 해결할 수 있는 문제이다.

힌트로 주어지는 영어 대문자 알파벳의 획수를 배열등에 넣고 관리해줘야 한다.

v.push_back(line[A[i]-'A']);

여기에서처럼 알파벳을 인덱스에 매칭시킬때

'A', 'a' 등을 빼주면

아스키코드 65 ~ 90번에 매칭된 대문자는

0~25에 매칭되고

97~122에 매칭된 소문자도 0~25에 매칭된다.

메모리도 아낄수 있고

이 문제같은 경우 복붙으로 깔끔하게 처리할 수 있으므로

기억해두면 좋다.

 

#include <bits/stdc++.h>
using namespace std;

int line[] = {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};
vector<int> v;
vector<int> v2;

int main(){
	string A,B;
	cin >> A >> B;
	
	for(int i=0; i<A.length(); i++){
		v.push_back(line[A[i]-'A']);
		v.push_back(line[B[i]-'A']);
	}
	
	while(v.size() > 2){
		v2.clear();
		for(int i=1; i<v.size(); i++){
			v2.push_back((v[i-1] + v[i]) % 10);
		}
		v.clear();
		v.assign(v2.begin(), v2.end());
	}
	
	cout << v[0] << v[1];
	return 0;
}

반응형