[C++] 백준 20436번: ZOAC 3

be_clever·2022년 1월 19일
0

Baekjoon Online Judge

목록 보기
36/172

문제 링크

20436번: ZOAC 3

문제 요약

성우가 독수리 타법으로 키보드를 입력한다. 두 손을 동시에 움직일 수는 없으며, 한글 자음이 있는 키는 왼손, 그 외의 키는 오른손으로 누르게 된다. 키를 누르는데 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;
}
profile
똑똑해지고 싶어요

0개의 댓글