๐Ÿ“’  ๋ฌธ์ œ ์ •๋ณด

 

 

๐Ÿ”’  ๋ฌธ์ œ ์„ค๋ช…

๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

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

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

  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"์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ”‘  ๋ฌธ์ œ ํ’€์ด

๋ฐฉ๋ฒ• 1. dictionary ํ™œ์šฉ

2์ฐจ์› ํ–‰๋ ฌ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์ธ๋ฑ์Šค๊ฐ„์˜ ์ฐจ์ด๋ฅผ ๊ตฌํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, 2์ฐจ์› ํ–‰๋ ฌ๋กœ ๋งŒ๋“  ํ›„ ๊ฐ ์ธ๋ฑ์Šค๋ฅผ ๋˜ ๊ฐ๊ฐ ๋ณ€์ˆ˜์— ์ง€์ •ํ•˜๊ณ  ๊ทธ ์ฐจ๋“ค์„ ๊ตฌํ•˜์ž๋‹ˆ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ์„œ ํฌ๊ธฐํ–ˆ๋‹ค. ๊ทผ๋ฐ ์ด๋ฅผ dictionary๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋‹ˆ ํ›จ์”ฌ ๊ฐ„๋‹จํ•ด์กŒ๋‹ค.

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

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

    last_l = keypad['*']
    last_r = keypad['#']

    for num in numbers:
        if num in [1, 4, 7]:
            answer += 'L'
            last_l = keypad[num]

        elif num in [3, 6, 9]:
            answer += 'R'
            last_r = keypad[num]

        else:
            if abs(last_l[0]-keypad[num][0])+abs(last_l[1]-keypad[num][1]) < abs(last_r[0]-keypad[num][0])+abs(last_r[1]-keypad[num][1]):
                answer += 'L'
                last_l = keypad[num]
            elif abs(last_l[0]-keypad[num][0])+abs(last_l[1]-keypad[num][1]) > abs(last_r[0]-keypad[num][0])+abs(last_r[1]-keypad[num][1]):
                answer += 'R'
                last_r = keypad[num]
            else:
                if hand == 'left':
                    answer += 'L'
                    last_l = keypad[num]
                else:
                    answer += 'R'
                    last_r = keypad[num]
    return answer

 

์œ„์˜ ํ’€์ด์—์„œ ๋ณ€์ˆ˜ ์ •๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์žˆ๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๊ฒ ๋‹ค.

def solution(numbers, hand):
    answer = ''
	
    # ํ‚คํŒจ๋“œ ์ƒ์„ฑ
    keypad = {
        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]
        }
    last_l = keypad['*']
    last_r = keypad['#']

	# ์ขŒ/์šฐ ํŒ๋ณ„ + ์—„์ง€ ์œ„์น˜ ์„ค์ •
    now = keypad[num]
    from_left = abs(last_l[0] - now[0]) + abs(last_l[1] - now[1])
    from_right = abs(last_r[0] - now[0]) + abs(last_r[1] - now[1])
    
    for num in numbers:
        if num in [1, 4, 7]:
            answer += 'L'
            last_l = now

        elif num in [3, 6, 9]:
            answer += 'R'
            last_r = now

        else:
            if from_left < from_right:
                answer += 'L'
                last_l = now
            elif from_left > from_right:
                answer += 'R'
                last_r = now
            else:
                if hand == 'left':
                    answer += 'L'
                    last_l = now
                else:
                    answer += 'R'
                    last_r = now
    return answer

 

 

๐Ÿ’ก  What I learned

1. ์ ‘๊ทผ ๋ฐฉํ–ฅ

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

 

2. Python ํ•จ์ˆ˜

abs() : ์ ˆ๋Œ“๊ฐ’ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜

 

3. 2์ฐจ์› ๋ฐฐ์—ด ์ƒ์„ฑ ๋ฐฉ๋ฒ•

ํ‚คํŒจ๋“œ๊ฐ€ 0~9, *, # ๋ฐ–์— ์—†๊ธฐ ๋–„๋ฌธ์— ๋ชจ๋“  key:value๊ฐ’์„ ์ž…๋ ฅํ•˜์—ฌ dictionary๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•œ ๋ฌธ์ œ์˜€๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ์™€๋Š” ๋ณ„๊ฐœ๋กœ, 2์ฐจ์› ๋ฐฐ์—ด์„ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ํ˜•์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ œ๋Œ€๋กœ ์ตํž ์ˆ˜ ์žˆ์—ˆ๋‹ค.

# ํ‚คํŒจ๋“œ 2์ฐจ์› ํ–‰๋ ฌ ์ƒ์„ฑํ•˜๊ธฐ
keypad = [[0 for column in range(3)] for row in range(4)]

# ํ‚คํŒจ๋“œ์— ์ •๋ณด ๋„ฃ๊ธฐ
key = 1
for r in range(3):
    for c in range(3):
        keypad[r][c] = key
        key += 1
keypad[3][0], keypad[3][1], keypad[3][1] = *, 0,  #

 

4. n์ด 1, 4, 7 ์ค‘ ํ•˜๋‚˜์ผ ๋•Œ

์‚ฌ์†Œํ•œ ํฌ์ธํŠธ์ด๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” or ๊ตฌ๋ฌธ์œผ๋กœ ํ•˜๋‚˜ ํ•˜๋‚˜ ๋‹ค ํ•ด์™”์—ˆ๋‹ค๋ฉด, ์ด์ œ๋ถ€ํ„ฐ๋Š” in ๋ฉค๋ฒ„ ์—ฐ์‚ฐ์ž์™€ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ณด๋‹ค ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

# before
if num == 1 or num == 4 or num == 7:

# after
if num in [1, 4, 7]:

 

BELATED ARTICLES

more