Today
-
Total
-
  • [백준알고리즘] 17487번: 타자 연습 - python 풀이
    Coding/Algorithm 2019. 10. 14. 17:08

    17487번: 타자 연습

     

    출처:

    백준알고리즘

     

    문제

    [그림1] QWERTY 키보드 영문 자판 배열. 출처: Wikipedia

    건덕이는 최근 자신의 독수리 타법의 속도에 좌절하며 타자를 연습하기 시작했다. 건덕이가 연습하는 타자법은 QWERTY 자판 배열을 기준으로 Y, G, B와 같거나 왼쪽에 있는 키는 왼손으로, 나머지 키는 오른손으로 누르는 타자 기법이다. 기준은 키보드의 각 행에 한한다.

    건덕이는 한 쪽 손이 더 많이 쓰이면 비효율적이라고 생각한다. 따라서 양 쪽에 달려 있는 Shift키와 길이가 긴 스페이스바를 통해 양손의 키를 누른 횟수의 차를 최소로 하도록 문장을 입력하려고 한다. 건덕이의 각 손이 키보드를 누른 횟수를 구해 보자.

    입력

    건덕이가 입력할 문장S가 주어진다.S는 영어 대소문자와 공백으로 이루어져 있으며, 공백 포함 최대 100글자이다. 공백은 연속해서 나타나지 않으며, 문장의 시작과 끝은 공백이 아니다.

    출력

    왼손과 오른손으로 키보드를 누른 횟수를 공백으로 나누어 출력한다.

    건덕이는 왼손잡이이기 때문에, 각 손이 눌러야 하는 키 개수의 차가 1일 경우에는 왼손으로 한 번 더 누른다.

    풀이

    # 백준 알고리즘 17487번: 타자 연습
    
    S = input()
    
    leftHand = ['q','w','e','r','t','y','a','s','d','f','g','z','x','c','v','b']
    rightHand = ['u','i','o','p','h','j','k','l','n','m']
    
    left = 0
    right = 0
    space = 0
    shift = 0
    
    
    for i in S:
        if i in leftHand or i.lower() in leftHand:
            left+=1
        elif i in rightHand or i.lower() in rightHand:
            right+=1
        if i == ' ':
            space+=1
        elif i.isupper():
            shift+=1
    
    for j in range(space):
        if right<left:
            right+=1
        else:
            left+=1
    
    for k in range(shift):
        if right<left:
            right+=1
        else:
            left+=1
    
    
    print(left, right)
    1. 왼 손으로 눌러야 하는 알파벳/오른손으로 눌러야 하는 알파벳들을 각각 리스트에 저장합니다.(리스트 하나만 선언하고 나머지처리 해도 상관 없습니다)
    2. 입력값을 순회하며 왼 손으로 눌러야 하는 알파벳이 나올 때 마다 left, 오른 손으로 눌러야 하는 알파벳이 나올 때 마다 right 값을 1씩 증가시키고, 공백과 대문자를 만나는 경우를 각각 세줍니다.
    3. 세어 놓은 공백/대문자를 만나는 경우마다 left가 적으면 right을, right이 적으면 left를 증가시킵니다.
      이때 문제에서 왼손잡이임을 명시했으므로 left==right인 경우에는 left를 증가시킵니다.
    4. 세어 놓은 left, right을 각각 출력합니다.

    댓글