성우가 독수리 타법으로 키보드를 입력한다. 두 손을 동시에 움직일 수는 없으며, 한글 자음이 있는 키는 왼손, 그 외의 키는 오른손으로 누르게 된다. 키를 누르는데 1의 시간이 걸리고, 손가락을 이동하는데 택시거리만큼의 시간이 걸린다. 초기 손가락 위치가 주어질 때, 성우가 주어진 문자열을 입력하는데 걸리는 시간을 구해야 한다.
단순한 구현 문제였습니다. 사실 상 키보드 상에서 대응되는 알파벳의 좌표를 입력하는 것이 매우 귀찮을 뿐이지 쉬운 문제입니다.
#include <bits/stdc++.h>
using namespace std;
int arr[26][2] = { {1, 2}, {5, 3}, {3, 3}, {3, 2}, {3, 1}, {4, 2}, {5, 2},
{6, 2}, {8, 1}, {7, 2}, {8, 2}, {9, 2}, {7, 3}, {6, 3}, {9, 1}, {10, 1},
{1, 1}, {4, 1}, {2, 2}, {5, 1}, {7, 1}, {4, 3}, {2, 1}, {2, 3}, {6, 1},
{1, 3} };
set<int> lft;
void init(void)
{
lft.insert('q' - 'a');
lft.insert('w' - 'a');
lft.insert('e' - 'a');
lft.insert('r' - 'a');
lft.insert('t' - 'a');
lft.insert('a' - 'a');
lft.insert('s' - 'a');
lft.insert('d' - 'a');
lft.insert('f' - 'a');
lft.insert('g' - 'a');
lft.insert('z' - 'a');
lft.insert('x' - 'a');
lft.insert('c' - 'a');
lft.insert('v' - 'a');
}
int main(void)
{
init();
char l, r;
cin >> l >> r;
string str;
cin >> str;
int res = 0;
for (auto& i : str)
{
if (lft.find(i - 'a') != lft.end())
{
res += (abs(arr[l - 'a'][0] - arr[i - 'a'][0]) + abs(abs(arr[l - 'a'][1] - arr[i - 'a'][1])));
res++;
l = i;
}
else
{
res += (abs(arr[r - 'a'][0] - arr[i - 'a'][0]) + abs(abs(arr[r - 'a'][1] - arr[i - 'a'][1])));
res++;
r = i;
}
}
cout << res;
return 0;
}