[프로그래머스] 키패드 누르기 (python 입문)

zae·2023년 4월 29일
1

python

목록 보기
3/3
post-thumbnail

💡 키패드 누르기 info


🦊 문제 설명

🌳 주어지는 입력

  • number : 키패드에서 누를 번호
  • hand : 오른손잡이right, 왼손잡이left
    가운데 번호이면서 왼손 엄지까지의 거리와 오른손 엄지까지의 거리가 동일할 때 필요
numbershand
[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]"right"
[7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]"left"
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]"right"

🌳 반환값

키패드를 어느손 엄지로 눌렀는지 L 혹은 R로 반환하면 된다.

result
"LRLLLRLLRRL"
"LRLLRRLLLRR"
"LLRLLRLLRL"

🔨 해결방법 (코드)

단순 python 입문에 좋은 문제라 풀어보았다!

  • keypad가 주석된 것처럼 배열이 있다 생각하고 lhandrhand[열, 행]으로 위치를 기록해주었다.
  • 거리는 단순히 |x1 - x2| + |y1 - y2|로 구해줬다.
    ⇒ 제곱으로 대충 거리 비교하려고 했는데 실패가 뜨는 경우가 있었다 :(
def solution(numbers, hand):
    answer = ''
    # keypad = [[1, 2, 3], [4, 5, 6], [7, 8, 9], ['*', 0, '#']]
    lhand = [3, 0]
    rhand = [3, 2]
    
    for num in numbers:
        if num == 1 or num == 4 or num == 7:
            answer += "L"
            lhand = [num//3, 0]
        elif num == 3 or num == 6 or num == 9:
            answer += "R"
            rhand = [num//3 - 1, 2]
        else:
            temp = num//3
            if num == 0: temp = 3
            # 거리 계산
            ldist = abs(temp - lhand[0]) + abs(lhand[1] - 1)
            rdist = abs(temp - rhand[0]) + abs(rhand[1] - 1)
            
            if ldist > rdist or (ldist == rdist and hand == "right"):
                answer += "R"
                rhand = [temp, 1]
            elif ldist < rdist or (ldist == rdist and hand == "left"):
                answer += "L"
                lhand = [temp, 1]
    
    return answer
profile
코린이 성장 과정! 깊이 있게 파고들 공부를 탐색하고 있습니다 :)

0개의 댓글