문제
- 성우는 한글 자음은 왼손 검지로, 모음은 오른손 검지로 입력한다.
- a의 좌표가 (x1, x2)이고 b의 좌표가 (x2, y2)일 때, 손가락이 움직이는데 |x1-x2|+|y1-y2| 만큼의 시간이 걸린다.
- 각 키를 누르는데 1의 시간이 걸린다
- 두 손을 동시에 움직일 수 없다.
- 문자열을 출력하는데 걸리는 시간의 최솟값 구하기
풀이
- "성우는 한글 자음은 왼손 검지로, 모음은 오른손 검지로 입력한다."
-> 문자를 하나씩 받고, 자음이면 왼손, 모음이면 오른손으로 입력하면 된다.
- 전체 키보드의 좌표를 구한다. (keyboard -> coor)
- 왼손과 오른손이 입력할 키들이 다르므로 자음을 집합으로 정해둔다 (key_left)
# 거리 계산하기
def calc_t(a, b) :
x1, y1 = coor[a]
x2, y2 = coor[b]
return abs(x1-x2) + abs(y1-y2)
left, right = input().split() # 왼손, 오른손 최초 위치
# 키보드 좌표
keyboard = [
list(map(str, 'qwertyuiop')),
list(map(str, 'asdfghjkl')),
list(map(str, 'zxcvbnm'))
]
key_left = set(list(map(str, 'qwertasdfgzxcv')))
coor = dict()
for i in range(3) :
for j, k in enumerate(keyboard[i]) :
coor[k] = (i, j)
time = 0 # 시간
# 하나의 문자씩 출력하기
for s in input() :
if s == left or s == right :
time += 1
continue
if s in key_left :
time += calc_t(left, s) + 1
left = s
else :
time += calc_t(right, s) + 1
right = s
print(time)
References