[2022. 02. 23 다시 품]
> 딕셔너리를 이용해서 구할 수 있음!
sL, sR = input().split()
inp_str = list(input())
left_keybord = {'q': (0, 0), 'w': (0, 1), 'e': (0, 2), 'r': (0, 3), 't': (0, 4), 'a': (1, 0), 's': (1, 1), 'd': (1, 2),
'f': (1, 3), 'g': (1, 4), 'z': (2, 0), 'x': (2, 1), 'c': (2, 2), 'v': (2, 3)}
right_keybord = {'y': (0, 5), 'u': (0, 6), 'i': (0, 7), 'o': (0, 8), 'p': (0, 9), 'h': (1, 5), 'j': (1, 6), 'k': (1, 7),
'l': (1, 8), 'b': (2, 4), 'n': (2, 5), 'm': (2, 6)}
lx, ly = left_keybord[sL]
rx, ry = right_keybord[sR]
answer = 0
cnt=0
for str in inp_str:
if str in left_keybord: # 왼쪽
nx, ny = left_keybord[str][0], left_keybord[str][1]
answer += abs(nx - lx) + abs(ny - ly)
lx, ly = nx, ny
cnt+=1
continue
else: # 오른쪽
nx, ny = right_keybord[str][0], right_keybord[str][1]
answer += abs(nx - rx) + abs(ny - ry)
rx, ry = nx, ny
cnt+=1
print(answer+cnt)
# 첫 번째 풀이
> 자음, 모음을 x,y로 구분하면 되는데 ㅠㅠ 바보 같이 딕셔너리에 대입해서 사용함.
dict = [
{'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': 'ㅡ'}
]
all_list = [
['ㅂ', 'ㅈ', 'ㄷ', 'ㄱ', 'ㅅ', 'ㅛ', 'ㅕ', 'ㅑ', 'ㅐ', 'ㅔ'],
['ㅁ', 'ㄴ', 'ㅇ', 'ㄹ', 'ㅎ', 'ㅗ', 'ㅓ', 'ㅏ', 'ㅣ'],
['ㅋ', 'ㅌ', 'ㅊ', 'ㅍ', 'ㅠ', 'ㅜ', 'ㅡ']
]
sl, sr = input().split()
def find_current_location(i):
for j in range(3):
if i in dict[j]:
x = j
y = all_list[j].index(dict[j][i])
return x, y
slx, sly = find_current_location(sl) # 왼손 현위치
srx, sry = find_current_location(sr) # 오른손 현위치
answer = 0
for i in input():
x, y = find_current_location(i)
if ((x == 0 or x == 1) and y < 5) or (x == 2 and y < 4): # 자음
# 이동
answer += abs(slx - x) + abs(sly - y)
slx = x
sly = y
# 누르기
answer += 1
else: #모음
# 이동
answer += abs(srx - x) + abs(sry - y)
srx = x
sry = y
# 누르기
answer += 1
print(answer,end='')
# 두 번째 풀이
> 자음, 모음 일치시키지 않고도 할 수 있는 방법을 찾아냄!
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']]
sl, sr = input().split()
def find_current_location(s):
for i, key in enumerate(keyboard):
if s in key:
return i, key.index(s)
return None
slx, sly = find_current_location(sl) # 왼손 현위치
srx, sry = find_current_location(sr) # 오른손 현위치
answer = 0
for i in input():
x, y = find_current_location(i)
if ((x == 0 or x == 1) and y < 5) or (x == 2 and y < 4): # 자음
# 이동
answer += abs(slx - x) + abs(sly - y)
slx = x
sly = y
# 누르기
answer += 1
else: # 모음
# 이동
answer += abs(srx - x) + abs(sry - y)
srx = x
sry = y
# 누르기
answer += 1
print(answer, end='')
# enumerate는 열거하다라는 뜻으로,
인덱스 값을 포함하는 enumerate 객체를 돌려준다.
(for문과 주로 사용된다.)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n2615] 오목 (in python) (0) | 2021.05.26 |
---|---|
[n17413] 단어 뒤집기 2 (in python) (0) | 2021.05.25 |
[n20291] 파일 정리 (0) | 2021.05.21 |
[n10994] 별 찍기 - 19 (0) | 2021.05.21 |
[n1244] 스위치 켜고 끄기 (0) | 2021.05.21 |