https://www.acmicpc.net/problem/15312
구현 문제.
두 이름의 길이가 같음이 보장되기 때문에, 상대적으로 쉽게 해결할 수 있는 문제이다.
힌트로 주어지는 영어 대문자 알파벳의 획수를 배열등에 넣고 관리해줘야 한다.
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;
}
반응형