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)
'Online Judge > Baekjoon' 카테고리의 다른 글
[Baekjoon 27907] The primes contain arbitrarily long arithmetic progressions | Python (0) | 2024.11.10 |
---|---|
[Baekjoon 23886] 알프수 1 | Python (0) | 2024.11.09 |
[Baekjoon 31418] 스펀지 | Python (0) | 2024.10.01 |
[Baekjoon 9414] 프로그래밍 대회 전용 부지 | Python (0) | 2024.09.19 |
[Baekjoon 14381] 숫자세는 양 (Small) | Python (0) | 2024.09.19 |