[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ /ํŒŒ์ด์ฌ /Python /2020 ์นด์นด์˜ค ์ธํ„ด์‹ญ
Algorithm/Programmers

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

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ’กsolutions )

โœ… ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆˆ๋‹ค

 - #left ์™ผ์†๊ฐ€๋ฝ์„ ์›€์ง์ด๋Š” ๊ฒฝ์šฐ(1,4,7)

 - #right ์˜ค๋ฅธ์†๊ฐ€๋ฝ์„ ์›€์ง์ด๋Š” ๊ฒฝ์šฐ(3,6,9)

 - #middle ๊ฐ€์šด๋ฐ ๋ฒˆํ˜ธ์ธ ๊ฒฝ์šฐ์—๋Š”

   -> ๊ฐ ๋‘ ์†๊ฐ€๋ฝ์˜ ์œ„์น˜์™€ ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ˆซ์ž ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์„œ ๊ฐ’ ๋น„๊ตํ•˜๊ธฐ(distance)

โœ… ๊ฑฐ๋ฆฌ๋Š” ์ขŒํ‘œ๋ฅผ ํ™œ์šฉํ•ด ๋งจํ•˜ํƒ„ ๊ฑฐ๋ฆฌ๋กœ ๊ตฌํ•œ๋‹ค -> distance ํ•จ์ˆ˜ ๊ตฌํ˜„

โœ… d_r(์˜ค๋ฅธ ์†๊ฐ€๋ฝ๊ณผ์˜ ๊ฑฐ๋ฆฌ)๊ฐ€ d_l(์™ผ ์†๊ฐ€๋ฝ๊ณผ์˜ ๊ฑฐ๋ฆฌ)๋ณด๋‹ค ํฌ๋ฉด L ๋ถ™์ด๊ธฐ (์™ผ ์†๊ฐ€๋ฝ ์ด๋™), ๊ทธ ๋ฐ˜๋Œ€๋„ ์„ฑ๋ฆฝ

โœ… ๋งŒ์•ฝ ๊ฑฐ๋ฆฌ ์ฐจ์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ์™ผ์†์žก์ด์ธ์ง€ ์˜ค๋ฅธ์†์žก์ด์ธ์ง€ ํŒ๋ณ„ ํ›„ answer์— ์ด๋™ํ•œ ์†๊ฐ€๋ฝ ๋”ํ•˜๊ธฐ

โœ… ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค 8๋ฒˆ 15๋ฒˆ์—์„œ ์ž๊พธ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ ๋•๋ด‡๊ธฐ์™€ ํ•จ๊ป˜ ์‚ดํŽด๋ณด๋‹ˆ ์ฒ˜์Œ ์ดˆ๊ธฐ๊ฐ’ tmp_r๊ณผ tmp_l๋ฅผ 0์œผ๋กœ ๋‘์—ˆ๋˜ ๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค. ์†๊ฐ€๋ฝ์ด ์ฒ˜์Œ ์œ„์น˜์—์„œ ์›€์ง์ด์ง€ ์•Š์€ ์ƒํƒœ์—์„œ(์ฆ‰, ์†๊ฐ€๋ฝ์ด #์ด๋‚˜ *์— ์œ„์น˜ํ•ด ์žˆ์„ ๋•Œ) ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ฒŒ ๋˜๋ฉด ์ดˆ๊ธฐ๊ฐ’์ด 0์œผ๋กœ ์„ค์ •๋ผ ์žˆ์–ด 0๊ณผ ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ˆซ์ž ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๋กœ ๊ตฌํ•˜๊ฒŒ ๋˜์–ด ์ž˜๋ชป๋œ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์˜€๋‹ค. -> ํ•ด๊ฒฐ์€ ๊ฐ„๋‹จํžˆ ์ดˆ๊ธฐ๊ฐ’์„ #, *๋กœ ๋‘๋ฉด ๋œ๋‹ค.

 

๐ŸŽซcode )

def solution(numbers, hand):
    answer = ''
    tmp_r = '#'
    tmp_l = '*'
    for n in numbers:
        if n in [3, 6, 9]: #right
            answer += 'R'
            tmp_r = n
        elif n in [1, 4, 7]: #left
            answer += 'L'
            tmp_l = n
        elif n in [2, 5, 8, 0]: #middle
            d_r = distance(tmp_r, n)
            d_l = distance(tmp_l, n)
            if d_r > d_l:
                answer += 'L'
                tmp_l = n
            elif d_r < d_l:
                answer += 'R'
                tmp_r = n
            elif d_r == d_l:
                if hand == 'right':
                    answer += 'R'
                    tmp_r = n
                else:
                    answer += 'L'
                    tmp_l = n
    return answer

def distance(hand, number):
    location = {'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)}
    hand = str(hand)
    number = str(number)
    x_h, y_h = location[hand]
    x_n, y_n = location[number]
    return abs(x_h - x_n) + abs(y_h - y_n)

 

๐Ÿ“Œ description )

๋ฌธ์ œ์ถœ์ฒ˜ : https://programmers.co.kr/learn/courses/30/lessons/67256?language=python3

 

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

[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

 

๋ฌธ์ œ ์„ค๋ช…

์Šค๋งˆํŠธํฐ ์ „ํ™” ํ‚คํŒจ๋“œ์˜ ๊ฐ ์นธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆซ์ž๋“ค์ด ์ ํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ „ํ™” ํ‚คํŒจ๋“œ์—์„œ ์™ผ์†๊ณผ ์˜ค๋ฅธ์†์˜ ์—„์ง€์†๊ฐ€๋ฝ๋งŒ์„ ์ด์šฉํ•ด์„œ ์ˆซ์ž๋งŒ์„ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋งจ ์ฒ˜์Œ ์™ผ์† ์—„์ง€์†๊ฐ€๋ฝ์€ * ํ‚คํŒจ๋“œ์— ์˜ค๋ฅธ์† ์—„์ง€์†๊ฐ€๋ฝ์€ # ํ‚คํŒจ๋“œ ์œ„์น˜์—์„œ ์‹œ์ž‘ํ•˜๋ฉฐ, ์—„์ง€์†๊ฐ€๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  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 ํ•ด์ฃผ์„ธ์š”.

์ž…์ถœ๋ ฅ ์˜ˆ

numbers                                                 hand                                             result
[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"

์ž…์ถœ๋ ฅ ์˜ˆ์— ๋Œ€ํ•œ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

์ˆœ์„œ๋Œ€๋กœ ๋ˆŒ๋Ÿฌ์•ผ ํ•  ๋ฒˆํ˜ธ๊ฐ€ [1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5]์ด๊ณ , ์˜ค๋ฅธ์†์žก์ด์ž…๋‹ˆ๋‹ค.

์™ผ์† ์œ„์น˜์˜ค๋ฅธ์† ์œ„์น˜๋ˆŒ๋Ÿฌ์•ผ ํ•  ์ˆซ์ž์‚ฌ์šฉํ•œ ์†์„ค๋ช…
* # 1 L 1์€ ์™ผ์†์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
1 # 3 R 3์€ ์˜ค๋ฅธ์†์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
1 3 4 L 4๋Š” ์™ผ์†์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
4 3 5 L ์™ผ์† ๊ฑฐ๋ฆฌ๋Š” 1, ์˜ค๋ฅธ์† ๊ฑฐ๋ฆฌ๋Š” 2์ด๋ฏ€๋กœ ์™ผ์†์œผ๋กœ 5๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
5 3 8 L ์™ผ์† ๊ฑฐ๋ฆฌ๋Š” 1, ์˜ค๋ฅธ์† ๊ฑฐ๋ฆฌ๋Š” 3์ด๋ฏ€๋กœ ์™ผ์†์œผ๋กœ 8์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
8 3 2 R ์™ผ์† ๊ฑฐ๋ฆฌ๋Š” 2, ์˜ค๋ฅธ์† ๊ฑฐ๋ฆฌ๋Š” 1์ด๋ฏ€๋กœ ์˜ค๋ฅธ์†์œผ๋กœ 2๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
8 2 1 L 1์€ ์™ผ์†์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
1 2 4 L 4๋Š” ์™ผ์†์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
4 2 5 R ์™ผ์† ๊ฑฐ๋ฆฌ์™€ ์˜ค๋ฅธ์† ๊ฑฐ๋ฆฌ๊ฐ€ 1๋กœ ๊ฐ™์œผ๋ฏ€๋กœ, ์˜ค๋ฅธ์†์œผ๋กœ 5๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
4 5 9 R 9๋Š” ์˜ค๋ฅธ์†์œผ๋กœ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
4 9 5 L ์™ผ์† ๊ฑฐ๋ฆฌ๋Š” 1, ์˜ค๋ฅธ์† ๊ฑฐ๋ฆฌ๋Š” 2์ด๋ฏ€๋กœ ์™ผ์†์œผ๋กœ 5๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
5 9 - -

๋”ฐ๋ผ์„œ "LRLLLRLLRRL"๋ฅผ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

์™ผ์†์žก์ด๊ฐ€ [7, 0, 8, 2, 8, 3, 1, 5, 7, 6, 2]๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์šฉํ•œ ์†์€ "LRLLRRLLLRR"์ด ๋ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

์˜ค๋ฅธ์†์žก์ด๊ฐ€ [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ˆ„๋ฅด๋ฉด ์‚ฌ์šฉํ•œ ์†์€ "LLRLLRLLRL"์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•