๐ŸŒžAlgorithm/๐Ÿ”ฅprogrammers

[programmers] [์นด์นด์˜ค ์ธํ„ด] ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ - 2020 ์นด์นด์˜ค ์ธํ„ด์‹ญ

๋ฟŒ์•ผ._. 2021. 1. 3. 21:52

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต - 2020 ์นด์นด์˜ค ์ธํ„ด์‹ญ


<[์นด์นด์˜ค ์ธํ„ด] ํ‚คํŒจ๋“œ ๋ˆ„๋ฅด๊ธฐ>

 

๋ฌธ์ œ ์„ค๋ช…

 

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

 

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

 

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

 

๋ฌธ์ œ ํ’€์ด

   - my solution

def solution(numbers, hand):
    answer = ''
    # 12 = ํ‚คํŒจ๋“œ *์„ ์˜๋ฏธ, 10 = ํ‚คํŒจ๋“œ #์„ ์˜๋ฏธ
    tempR = 12 #์˜ค๋ฅธ์† ์œ„์น˜ ์ €์žฅ
    tempL = 10 #์™ผ์† ์œ„์น˜ ์ €์žฅ

    for i in range(len(numbers)):
        if (numbers[i] == 0): #ํ‚คํŒจ๋“œ 0 -> ๊ณ„์‚ฐ์„ ์œ„ํ•ด 11๋กœ ๋ณ€๊ฒฝ
            numbers[i] = 11
        if (numbers[i] == 1 or numbers[i] == 4 or numbers[i] == 7): #1,4,7์ธ ๊ฒฝ์šฐ ์™ผ์†
            answer += "L"
            tempL = numbers[i]
        elif (numbers[i] == 3 or numbers[i] == 6 or numbers[i] == 9): #3,6,9์ธ ๊ฒฝ์šฐ ์˜ค๋ฅธ์†
            answer += "R"
            tempR = numbers[i]
        else: #2,5,8,7์ธ ๊ฒฝ์šฐ 
            #๊ฑฐ๋ฆฌ ๊ตฌํ•จ
            temp1 = abs(numbers[i] - tempL) 
            temp2 = abs(numbers[i] - tempR)
            dstL = 0
            dstR = 0
            #๊ฑฐ๋ฆฌ ๋ณ„๋กœ ์ˆซ์ž ๋ถ€์—ฌ
            if (temp1 == 1 or temp1 == 3):
                dstL = 1
            elif (temp1 == 2 or temp1 == 4 or temp1 == 6):
                dstL = 2
            elif (temp1 == 5 or temp1 == 7 or temp1 == 9):
                dstL = 3
            elif (temp1 == 8 or temp1 == 10):
                dstL = 4

            if (temp2 == 1 or temp2 == 3):
                dstR = 1
            elif (temp2 == 2 or temp2 == 4 or temp2 == 6):
                dstR = 2
            elif (temp2 == 5 or temp2 == 7 or temp2 == 9):
                dstR = 3
            elif (temp2 == 8 or temp2 == 10):
                dstR = 4
            
            if (dstL < dstR): #์™ผ์†์ด ๋” ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ
                answer += "L"
                tempL = numbers[i]
            elif (dstL == dstR): #๊ฑฐ๋ฆฌ ๊ฐ™์€ ๊ฒฝ์šฐ hand๋”ฐ๋ผ
                if (hand == "right"):
                    answer += "R"
                    tempR = numbers[i]
                else:
                    answer += "L"
                    tempL = numbers[i]
            else: #์˜ค๋ฅธ์†์ด ๋” ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ
                answer += "R"
                tempR = numbers[i]

    return answer

  ๊ณ„์‚ฐ์˜ ํŽธ๋ฆฌ๋ฅผ ์œ„ํ•˜์—ฌ * = 10, 0 = 11, # = 12๋กœ ๋ฐ”๊พธ์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

 

    1) 1,4,7์ธ ๊ฒฝ์šฐ ์™ผ์†, 3,6,9์ธ ๊ฒฝ์šฐ ์˜ค๋ฅธ์†์„ answer์— ์ €์žฅ

    2) ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ -> ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๊ธฐ

        2-1) ์ฐจ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด ๊ฐ ๊ฑฐ๋ฆฌ๋ณ„๋กœ ์ˆซ์ž ๋ถ€์—ฌ

               - ์ฐจ๊ฐ€ 1,3์ธ ๊ฒฝ์šฐ: 1

               - ์ฐจ๊ฐ€ 2,4,6์ธ ๊ฒฝ์šฐ: 2

               - ์ฐจ๊ฐ€ 5,7,9์ธ ๊ฒฝ์šฐ: 3

               - ์ฐจ๊ฐ€ 8,10์ธ ๊ฒฝ์šฐ: 4

        2-2) 2-1)์—์„œ ๊ตฌํ•œ ์ˆซ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ๋” ๊ฐ€๊นŒ์šด ์†์€ answer์— ์ €์žฅ

               - ์™ผ์†์ด ๋” ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ: L

               - ์˜ค๋ฅธ์†์ด ๋” ๊ฐ€๊นŒ์šด ๊ฒฝ์šฐ: R

               - ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ: hand ๋”ฐ๋ผ


๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋งŽ์€ ๋ฌธ์ œ์˜€๊ธฐ์— ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค๋ณด๋‹ค ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋” ๊ฑธ๋ ธ๋‹ค.    

 

์ถœ์ฒ˜: ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์—ฐ์Šต, https://programmers.co.kr/learn/challenges