[프로그래머스] 키패드 누르기

cheeeese·2022년 1월 19일
0

코딩테스트 연습

목록 보기
28/151
post-thumbnail

📖 문제

https://programmers.co.kr/learn/courses/30/lessons/67256

💻 내 코드

  • 다른 사람 코드 참고함
def solution(numbers, hand):
    answer = ''
    
    dic={1 : [0, 0], 2 : [0, 1], 3 : [0, 2], 
         4 : [1, 0], 5 : [1, 1], 6 : [1, 2],
         7 : [2, 0], 8 : [2, 1], 9 : [2, 2], 
        '*' : [3, 0], 0 : [3, 1], '#' : [3, 2]}
    
    left_s=dic['*']
    right_s=dic['#']
    
    for i in numbers: 
        now = dic[i]
        
        if i in [1, 4, 7]:
            answer +="L"
            left_s=now
        elif i in [3, 6, 9]:
            answer += 'R'
            right_s=now
        else:
            left_d = 0
            right_d = 0
        
            for a, b, c in zip(left_s, right_s, now):
                left_d+=abs(a-c)
                right_d+=abs(b-c)
            if left_d < right_d:
                answer += 'L'
                left_s=now
            elif left_d > right_d:
                answer += 'R'
                right_s=now
            else:
                if hand=='left':
                    answer+='L'
                    left_s=now
                else:
                    answer += 'R'
                    right_s=now
                
    return answer

➕ 추가

  • dictionary를 잘 활용하자

❗ zip()

  • zip: 여러 개의 iterable자료형이 개수가 동일할 때 묶어주는 역할
    • iterable 자료형: 리스트, 튜플 같이 반복 가능한 자료형
    • iterable 자료형의 각각의 요소를 나눈 후 순서대로 묶어서 요소 개수만큼 새로운 iterable 자료형을 생성
num = [1, 2, 3]
fruit = ['apple', 'banana', 'orange']
color = ['red', 'yellow', 'orange']
zip_list = zip(num, fruit, color)
print(list(zip_list))
>>> [(1, 'apple', 'red'), (2, 'banana', 'yellow'), (3, 'orange', 'orange')]

for문에서의 사용
1)

for x, y in zip(range(10), range(10)): 
	print(x, y)

출력

0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

2)

for number, upper, lower in zip("12345", "ABCDE", "abcde"):
    print(number, upper, lower)

출력

1 A a
2 B b
3 C c
4 D d
5 E e

0개의 댓글