๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š๊ณต๋ถ€/์ฝ”๋”ฉํ…Œ์ŠคํŠธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - [์นด์นด์˜ค ์ธํ„ด] ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ, ํŒŒ์ด์ฌ

by Janger 2021. 12. 6.
728x90
๋ฐ˜์‘ํ˜•

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ

[1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5] "right" "LRLLLRLLRRL" [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2] "left" "LRLLRRLLLRR" [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] "right" "LLRLLRLLRL"

programmers.co.kr

 

pad_map = { 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]
        }


# ์™ผ์†๊ณผ ์˜ค๋ฅธ์†์ด ๋ˆŒ๋Ÿฌ์•ผํ•  ์ˆซ์ž์ค‘ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณณ ์ฐพ๊ธฐ
def getOffset(L, R, number, hand):
    
    targetPos = pad_map[number]
    leftPos = pad_map[L]
    rightPos = pad_map[R]
    
    leftDistance = abs( targetPos[0] - leftPos[0] ) + abs( targetPos[1] - leftPos[1] )
    rightDistance = abs( targetPos[0] - rightPos[0] ) + abs( targetPos[1] - rightPos[1] )
    
    
    if leftDistance < rightDistance:
        return "L"
    elif leftDistance > rightDistance:
        return "R"
    elif leftDistance == rightDistance:
        return hand
        
    
    


def solution(numbers, hand):
    answer = ''

    
    LeftSide = [1, 4, 7]
    RightSide = [3, 6, 9]
    
    middle = [2, 5, 8, 0]
    
    curLeft = '*'
    curRight = '#'
    
    if hand == 'right':
        hand = 'R'
    else:
        hand = 'L'
        
    
    for number in numbers:
        if number in LeftSide:
            answer += 'L'
            curLeft = number
            
        elif number in RightSide:
            answer += 'R'
            curRight = number
        
        
        elif number in middle:
            if getOffset(curLeft, curRight, number, hand) == 'L':
                curLeft = number
                answer += 'L'
            elif getOffset(curLeft, curRight, number, hand) == 'R':
                curRight = number
                answer += 'R'
            
    
    return answer

 

 

 

ํ•ต์‹ฌ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. 

pad_map = { 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]
        }
        
 leftDistance = abs( targetPos[0] - leftPos[0] ) + abs( targetPos[1] - leftPos[1] )
 rightDistance = abs( targetPos[0] - rightPos[0] ) + abs( targetPos[1] - rightPos[1] )

pad_map์ด๋ผ๋Š” ๊ฐ ์ˆซ์ž๋งˆ๋‹ค์˜ ์œ„์น˜ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ , 

๋ˆŒ๋Ÿฌ์•ผ ํ•  ์ˆซ์ž์˜ ์œ„์น˜์™€ ๊ฐ ์†๊ฐ€๋ฝ์˜ ์œ„์น˜๋ผ๋ฆฌ ๋บ„์…ˆ์„ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ๋‚˜์˜ค๋Š” ์Œ์ˆ˜๋Š” abs ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ ˆ๋Œ€ ๊ฐ’์œผ๋กœ ๋ฐ˜ํ™˜์„ ํ•˜์—ฌ ์†๊ฐ€๋ฝ์ด ๋ˆŒ๋Ÿฌ์•ผ ํ•  ์ˆซ์ž์™€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

ํ•˜๋ฉด์„œ ๋Š๋‚€ ์ , 

๋ฌด์ง€์„ฑ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์ด์ „์— ๋ฉ”๋ชจ์žฅ์ด๋‚˜ ๊ทธ๋ฆผํŒ์„ ์ผœ์„œ, ์ •๋‹ต์„ ๋„์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ํŒจํ„ด์ด ์žˆ๋Š”์ง€๋ฅผ ๋จผ์ € ์ ์–ด๊ฐ€๋ฉด์„œ ์ฝ”๋“œ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„์„ ํ• ์ง€๋ฅผ ์ƒ๊ฐ์„ ํ•ด์„œ, ๊ทธ๋‹ค์Œ์— ์ฝ”๋“œ๋กœ ์งœ๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. 

 

๊ฑ ๋ฉ”๋ชจํ•˜๋ฉด์„œ ํŒจํ„ด์„ ์ฐพ์•„๋‚ด๋ผ ์ด๋ง์ด์•ผ~

728x90
๋ฐ˜์‘ํ˜•