https://www.acmicpc.net/problem/20436


문제

 

주어진 키보드 조건에서 주어진 문자열을 타이핑하는 데에 걸리는 시간의 최솟값을 구하는 문제이다.

 


풀이

 

키보드 좌표를 구하는 부분과 키보드 타이핑 시간을 구하는 부분이 필요하다.

키보드 좌표를 구하는 부분은 아래와 같이 리스트 속 문자열을 만들고, 여기서 해당 문자를 탐색하는 방식으로 만들어도 된다.

keyboard = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm']

그러나 오른손과 왼손을 구분하는 것 때문에 각 문자에 좌표를 설정해서 딕셔너리로 찾는 것이 더 직관적이고 좋은 것 같아 아래 코드와 같이 구현했다.

타이핑 시간 계산은 문제에서 제시한 방식을 그대로 사용하였다.

 


코드

 

lkeyboard = {'z':(0,0), 'x':(1,0), 'c':(2,0), 'v':(3,0),
            'a':(0,1), 's':(1,1), 'd':(2,1), 'f':(3,1), 'g':(4,1),
            'q':(0,2), 'w':(1,2), 'e':(2,2), 'r':(3,2), 't':(4,2)}
rkeyboard = {'y':(5,2), 'u':(6,2), 'i':(7,2), 'o':(8,2), 'p':(9,2),
            'h':(5,1), 'j':(6,1), 'k':(7,1), 'l':(8,1),
            'b':(4,0), 'n':(5,0), 'm':(6,0)}
lefth, righth = input().split()
lefth = lkeyboard[lefth]
righth = rkeyboard[righth]
string = input()
ans = 0
for letter in string:
    if letter in lkeyboard:
        ans += abs(lefth[0] - lkeyboard[letter][0]) + abs(lefth[1] - lkeyboard[letter][1])
        lefth = lkeyboard[letter]
    else:
        ans += abs(righth[0] - rkeyboard[letter][0]) + abs(righth[1] - rkeyboard[letter][1])
        righth = rkeyboard[letter]
    ans += 1
print(ans)

 

애스터로이드