🔅코딩테스트 공부🔅/❗백준
[백준] 20436번 ZOAC 3(python)
윤무무
2023. 4. 17. 16:50
https://www.acmicpc.net/problem/20436
20436번: ZOAC 3
첫 번째 줄에는 두 알파벳 소문자 sL, sR이 주어진다. sL, sR은 각각 왼손 검지손가락, 오른손 검지손가락의 처음 위치이다. 그 다음 줄에는 알파벳 소문자로 구성된 문자열이 주어진다. 문자열의
www.acmicpc.net
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)