본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 20436번 ZOAC 3(python)

by 윤무무 2023. 4. 17.

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)

댓글