๐Ÿค– ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

#ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํŒŒ์ด์ฌ Lv.1 #ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ

seoyeun 2021. 11. 7. 22:03
๋ฌธ์ œ์„ค๋ช…
: ์ˆœ์„œ๋Œ€๋กœ ๋ˆ„๋ฅผ ๋ฒˆํ˜ธ๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด numbers, ์™ผ์†์žก์ด์ธ์ง€ ์˜ค๋ฅธ์†์žก์ด์ธ ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด hand๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ ๋ฒˆํ˜ธ๋ฅผ ๋ˆ„๋ฅธ ์—„์ง€์†๊ฐ€๋ฝ์ด ์™ผ์†์ธ ์ง€ ์˜ค๋ฅธ์†์ธ ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ฐ์†๋œ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑ

๋ฌธ์ œํ’€์ด

  1. numbers ๋ฐฐ์—ด์—์„œ 1,4,7 =  'L', 3,6,9 = 'R'๋กœ ๊ฒฐ๊ณผ๊ฐ€ ํ™•์ •
  2. ์ด๋“ค์„ ์ œ์™ธํ•œ 2,5,8,0์ด ๋‚˜์˜ฌ ๋•Œ 'L'๊ณผ 'R'์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•จ.
  3.  ํ‚คํŒจ๋“œ๋ฅผ {key:value} ํ˜•ํƒœ์ธ dictionary ์ž๋ฃŒํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ขŒํ‘œ๊ฐ’์œผ๋กœ ๋งŒ๋“ค๊ธฐ
  4. ๋‹ค์Œ ๋ˆ„๋ฅผ ์ˆซ์ž๋ฅผ dictionary์˜ key๋กœ ํ˜ธ์ถœํ•ด์„œ ์ขŒํ‘œ๋ฅผ ๋ฐ›๊ณ 
  5. ํ•ด๋‹น ์ขŒํ‘œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ ์ธก์ •๋ฒ•์˜ ๊ณต์‹์ธ |x1-y1|+|x2-y2|๋ฅผ ํ†ตํ•ด์„œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ๋‹ค
๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์žํŒ์„ ์ขŒํ‘œ๋กœ ์ƒ๊ฐํ•˜์—ฌ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์„ ๋งจํ•˜ํƒ„๊ฑฐ๋ฆฌ ์ธก์ • ๋ฐฉ๋ฒ• ์ด์šฉ
def solution(numbers, hand):
    answer = ''
    key_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 = [1,4,7]
    right = [3,6,9]
    lhand = '*'
    rhand = '#'
    
    for i in numbers:
        if i in left:
            answer += 'L'
            lhand = i
        elif i in right:
            answer += 'R'
            rhand = i
            
        else : # 2, 5, 8, 0์„ ๋ˆ„๋ฅด๋Š” ๊ฒฝ์šฐ
            curPos = key_dict[i]
            lPos = key_dict[lhand]
            rPos = key_dict[rhand]
            # ์ขŒํ‘œ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ
            ldist = abs(curPos[0]-lPos[0]) + abs(curPos[1]-lPos[1])
            rdist = abs(curPos[0]-rPos[0]) + abs(curPos[1]-rPos[1])
            
            if ldist < rdist : # ์™ผ์†์ด ๋” ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ
                answer += 'L'
                lhand = i
                
            elif ldist > rdist : # ์˜ค๋ฅธ์†์ด ๋” ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ
                answer += 'R'
                rhand = i
            
            else : # ๋‘ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
                if hand == 'left' : # ์™ผ์†์žก์ด ๊ฒฝ์šฐ
                    answer += 'L'
                    lhand = i
                else : # ์˜ค๋ฅธ์†์žก์ด ๊ฒฝ์šฐ
                    answer += 'R'
                    rhand = i
                    
     return answer

๐Ÿค“ ์ถ”๊ฐ€ ์œ ํด๋ฆฌ๋””์–ธ ๊ฑฐ๋ฆฌ์™€ ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ์— ๋Œ€ํ•˜์—ฌ

์œ ํด๋ฆฌ๋””์–ธ ๊ฑฐ๋ฆฌ d = ๋ฃจํŠธ ((a1-b1)^2 + (a2-b2)^2), ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ d = |a1-b1| + |a2-b2|
# ์œ ํด๋ฆฌ๋””์–ธ ๊ฑฐ๋ฆฌ
def euclidean_distance(pt1, pt2):
  distance = 0
  for i in range(len(pt1)):
    distance += (pt1[i] - pt2[i]) ** 2
  return distance ** 0.5
  
# ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ
def manhattan_distance(pt1, pt2):
  distance = 0
  for i in range(len(pt1)):
    distance += abs(pt1[i] - pt2[i])
  return distance