[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€/python] 2020 카카였 인턴십 : ν‚€νŒ¨λ“œ λˆ„λ₯΄κΈ°

2021. 6. 24. 18:34

문제 μ„€λͺ…

슀마트폰 μ „ν™” ν‚€νŒ¨λ“œμ˜ 각 칸에 λ‹€μŒκ³Ό 같이 μˆ«μžλ“€μ΄ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€.

이 μ „ν™” ν‚€νŒ¨λ“œμ—μ„œ 왼손과 였λ₯Έμ†μ˜ μ—„μ§€μ†κ°€λ½λ§Œμ„ μ΄μš©ν•΄μ„œ μˆ«μžλ§Œμ„ μž…λ ₯ν•˜λ €κ³  ν•©λ‹ˆλ‹€.
맨 처음 왼손 엄지손가락은 * ν‚€νŒ¨λ“œμ— 였λ₯Έμ† 엄지손가락은 # ν‚€νŒ¨λ“œ μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•˜λ©°, 엄지손가락을 μ‚¬μš©ν•˜λŠ” κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. 엄지손가락은 μƒν•˜μ’Œμš° 4가지 λ°©ν–₯으둜만 이동할 수 있으며 ν‚€νŒ¨λ“œ 이동 ν•œ 칸은 거리둜 1에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.
  2. μ™Όμͺ½ μ—΄μ˜ 3개의 숫자 1, 4, 7을 μž…λ ₯ν•  λ•ŒλŠ” 왼손 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  3. 였λ₯Έμͺ½ μ—΄μ˜ 3개의 숫자 3, 6, 9λ₯Ό μž…λ ₯ν•  λ•ŒλŠ” 였λ₯Έμ† 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  4. κ°€μš΄λ° μ—΄μ˜ 4개의 숫자 2, 5, 8, 0을 μž…λ ₯ν•  λ•ŒλŠ” 두 μ—„μ§€μ†κ°€λ½μ˜ ν˜„μž¬ ν‚€νŒ¨λ“œμ˜ μœ„μΉ˜μ—μ„œ 더 κ°€κΉŒμš΄ 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.
    4-1. λ§Œμ•½ 두 μ—„μ§€μ†κ°€λ½μ˜ 거리가 κ°™λ‹€λ©΄, 였λ₯Έμ†μž‘μ΄λŠ” 였λ₯Έμ† 엄지손가락, μ™Όμ†μž‘μ΄λŠ” 왼손 엄지손가락을 μ‚¬μš©ν•©λ‹ˆλ‹€.

μˆœμ„œλŒ€λ‘œ λˆ„λ₯Ό λ²ˆν˜Έκ°€ λ‹΄κΈ΄ λ°°μ—΄ numbers, μ™Όμ†μž‘μ΄μΈμ§€ 였λ₯Έμ†μž‘이인 지λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¬Έμžμ—΄ handκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, 각 번호λ₯Ό λˆ„λ₯Έ 엄지손가락이 왼손인 지 였λ₯Έμ†μΈ 지λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ—°μ†λœ λ¬Έμžμ—΄ ν˜•νƒœλ‘œ return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

μ œν•œμ‚¬ν•­

  • numbers λ°°μ—΄μ˜ ν¬κΈ°λŠ” 1 이상 1,000 μ΄ν•˜μž…λ‹ˆλ‹€.
  • numbers λ°°μ—΄ μ›μ†Œμ˜ 값은 0 이상 9 μ΄ν•˜μΈ μ •μˆ˜μž…λ‹ˆλ‹€.
  • handλŠ” "left" λ˜λŠ” "right" μž…λ‹ˆλ‹€.
    • "left"λŠ” μ™Όμ†μž‘μ΄, "right"λŠ” 였λ₯Έμ†μž‘이λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  • 왼손 엄지손가락을 μ‚¬μš©ν•œ κ²½μš°λŠ” L, 였λ₯Έμ† 엄지손가락을 μ‚¬μš©ν•œ κ²½μš°λŠ” R을 μˆœμ„œλŒ€λ‘œ 이어뢙여 λ¬Έμžμ—΄ ν˜•νƒœλ‘œ return ν•΄μ£Όμ„Έμš”.

 

μ •λ‹΅

def solution(numbers, hand):
    answer = ''
    inter = {0:0, 1:1, 2:2, 3:1, 4:2, 5:3, 6:2, 7:3, 8:4, 9:3, 10:4}
    l_pad = [1, 4, 7]
    r_pad = [3, 6, 9]
    l = 10
    r = 12
    
    for n in numbers:
        # 0 -> 11둜 λ°”κΎΈκΈ°
        if n == 0: n=11
            
        if n in l_pad:
            answer += 'L'
            l = n
        elif n in r_pad:
            answer += 'R'
            r = n
            
        # κ°€μš΄λ° 숫자
        else:
            l_inter = inter[abs(n-l)]
            r_inter = inter[abs(n-r)]
            
            if l_inter == r_inter:
                if hand == "left":
                    answer += 'L'
                    l = n
                else:
                    answer += 'R'
                    r = n
                    
            elif l_inter < r_inter:
                answer += "L"
                l = n
                
            else:
                answer += "R"
                r = n
    
    return answer

*, 0, # 을 10, 11, 12둜 λ°”κΎΈμ–΄ μƒκ°ν•œλ‹€.

inter의 keyλŠ” κ°€μš΄λ° μˆ«μžμ™€ ν˜„μž¬ μœ„μΉ˜μ˜ 차이이고 valueλŠ” κ°€μš΄λ° μˆ«μžμ™€ ν˜„μž¬ μœ„μΉ˜μ˜ 거리λ₯Ό λœ»ν•œλ‹€.

 

numbers의 n이 κ°€μš΄λ° 숫자일 경우

l_inter와 r_inter에 interλ₯Ό μ΄μš©ν•˜μ—¬ μˆ«μžμ™€ ν˜„μž¬ μœ„μΉ˜μ˜ 거리λ₯Ό μ €μž₯ν•œλ‹€.

μ–‘μ†μ˜ μˆ«μžμ™€μ˜ 거리가 같을 경우 μ™Όμ†μž‘μ΄μΈμ§€ 였λ₯Έμ†μž‘이인지에 따라 μ •ν•˜κ³ 

같지 μ•Šμ„ 경우 μ–‘μ†μ˜ μˆ«μžμ™€μ˜ 거리 쀑 거리가 더 짧은 손을 μ„ νƒν•œλ‹€.

728x90

BELATED ARTICLES

more