https://www.acmicpc.net/problem/20436
1. 난이도 실버4
2. 내가 작성한 풀이
- 아스키 코드를 이용해서 규칙성을 찾을 수 있을까 고민했는데 위치에 규칙이 없어서 하나하나 입력해줬다.
- 차근 차근 조건만 빼먹지 않으면 쉽게 풀 수 있는 문제다.
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','ㅡ'],['',''],['',''],['','']]
]
def search(alpha): #keyboard의 index를 return 해주는 함수
for i in range(3):
for j in range(10):
if keyboard[i][j][0] == alpha:
return i,j
left, right = input().split()
left = search(left) #처음 왼손위치
right = search(right) #처음 오른손위치
total = 0 #총 걸린 시간
for i in input():
new = search(i)
#모음인 경우 right와의 거리 비교
if keyboard[new[0]][new[1]][1] in ('ㅏ','ㅑ','ㅓ','ㅕ','ㅗ','ㅛ','ㅜ','ㅠ','ㅡ','ㅣ','ㅐ','ㅔ'):
total += (abs(right[0] - new[0]) + abs(right[1] - new[1]))
right = new
#자음인 경우 left와 거리 비교
else:
total += (abs(left[0] - new[0]) + abs(left[1] - new[1]))
left = new
#누르는 시간이 1초 소요되기 때문에 1을 더해줌
total+=1
print(total)
아래와 같이 list를 작성하면 한글,영어 쌍을 하나하나 적어주지 않아도 된다!
keyboard = ['qwertyuiop','asdfghjkl0','zxcvbnm000']
mo = 'yuiophjklbnm'
def search(alpha):
for i in range(3):
for j in range(10):
if keyboard[i][j] == alpha:
return i,j
left, right = input().split()
left = search(left) #처음 왼손위치
right = search(right) #처음 오른손위치
total = 0
for i in input():
new = search(i)
if keyboard[new[0]][new[1]] in mo:
total += (abs(right[0] - new[0]) + abs(right[1] - new[1]))
right = new
else:
total += (abs(left[0] - new[0]) + abs(left[1] - new[1]))
left = new
total+=1
print(total)
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 1747번 소수&팰린드롬(python) (0) | 2023.04.19 |
---|---|
[백준] 1913번 달팽이(python) (0) | 2023.04.18 |
[백준] 1244번 스위치 켜고 끄기(python) (0) | 2023.04.15 |
[백준] 4396번 지뢰 찾기(python) (0) | 2023.04.14 |
[백준] 2578번 빙고(python) (0) | 2023.04.13 |
댓글