Implementation_13_ZOAC3(20436)

Eugenius1st·2022년 5월 4일
0

Algorithm_Baekjoon

목록 보기
92/158

Implementation_13_ZOAC3(20436)

문제

2020년 12월, 세 번째로 개최된 ZOAC의 오프닝을 맡은 성우는 누구보다 빠르게 ZOAC를 알리려 한다.

하지만 안타깝게도 성우는 독수리타법이다!

독수리 타법이란 양 손의 검지손가락만을 이용해 타자를 치는 타법이다.
성우는 한글 자음 쪽 자판은 왼손 검지손가락으로 입력하고, 한글 모음 쪽 자판은 오른손 검지손가락으로 입력한다.
a의 좌표가 (x1, y1)이고, b의 좌표가 (x2, y2)일 때, a에 위치한 성우의 손가락이 b로 이동하는 데에는 a와 b의 택시 거리 |x1-x2|+|y1-y2| 만큼의 시간이 걸린다.
각 키를 누르는 데에는 1의 시간이 걸린다.
성우는 두 손을 동시에 움직일 수 없다.
성우가 사용하는 키보드는 쿼티식 키보드이며, 아래 그림처럼 생겼다.

입력

첫 번째 줄에는 두 알파벳 소문자 sL, sR이 주어진다. sL, sR은 각각 왼손 검지손가락, 오른손 검지손가락의 처음 위치이다.

그 다음 줄에는 알파벳 소문자로 구성된 문자열이 주어진다. 문자열의 길이는 최대 100자이다. 빈 문자열은 주어지지 않는다.

출력

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.

풀이

  • 모음 저장
  • 이미 왼손이나 오른손이 그 위치에 있는경우
  • 아닌 경우 각각의 위치 별 x, y위치를 입력받자.

코드

# 문자의 x, y 위치를 반환해준다.
def find_loc(word):
    keyboard = [
        ['q','w','e','r','t','y','u','i','o','p'],
        ['a','s','d','f','g','h','j','k','l'],
        ['z','x','c','v','b','n','m']
    ]

    for i, key in enumerate(keyboard):
        if word in key:
            y = i
            x = key.index(word)
            return x, y


sl, sr = map(str, input().split())
data = input()
result = 0

# 모음 저장
consonant = "qwertasdfgzxcv"

for d in data:
    
    # 이미 왼손이나 오른손이 그 위치에 있는경우
    if sl == d or sr == d:
        result += 1
        
    
    # 아닌 경우 각각의 위치 별 x, y위치를 입력받자.
    else:

        slx, sly = find_loc(sl)
        srx, sry = find_loc(sr)
        dx, dy = find_loc(d)

        # 모음이라면 왼쪽이 이동한다.
        if d in consonant:
            result += abs(slx-dx) + abs(sly-dy) + 1
            sl, slx, sly = d, dx, dy
        # 자음이라면 오른쪽이 이동한다.
        else:
            result += abs(srx-dx) + abs(sry-dy) + 1
            sr, srx, sry = d, dx, dy

print(result)
    

배운 것

코멘트

profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글