새소식

반응형
Algotithms

[백준] 20436 ZOAC 3

  • -
728x90
반응형

문제

  • 성우는 한글 자음은 왼손 검지로, 모음은 오른손 검지로 입력한다.
  • a의 좌표가 (x1, x2)이고 b의 좌표가 (x2, y2)일 때, 손가락이 움직이는데 |x1-x2|+|y1-y2| 만큼의 시간이 걸린다.
  • 각 키를 누르는데 1의 시간이 걸린다
  • 두 손을 동시에 움직일 수 없다.
  • 문자열을 출력하는데 걸리는 시간의 최솟값 구하기

 

  • 1 <= 문자열 길이 <= 100

 

풀이

  • "성우는 한글 자음은 왼손 검지로, 모음은 오른손 검지로 입력한다."
    -> 문자를 하나씩 받고, 자음이면 왼손, 모음이면 오른손으로 입력하면 된다.
  • 전체 키보드의 좌표를 구한다. (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

  • 백준 구현
반응형

'Algotithms' 카테고리의 다른 글

[백준] 1956 운동  (1) 2023.12.08
[백준] 5547 일루미네이션  (1) 2023.12.06
[백준] 10941 팰린드롬?  (1) 2023.12.05
[백준] 13164 행복 유치원  (1) 2023.12.05
[백준] 2668 숫자고르기  (0) 2023.11.02
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.