ν‹°μŠ€ν† λ¦¬ λ·°

πŸ–₯ 문제

슀마트폰 μ „ν™” ν‚€νŒ¨λ“œμ˜ 각 칸에 λ‹€μŒκ³Ό 같이 μˆ«μžλ“€μ΄ μ ν˜€ μžˆμŠ΅λ‹ˆλ‹€.

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

이 μ „ν™” ν‚€νŒ¨λ“œμ—μ„œ 왼손과 였λ₯Έμ†μ˜ μ—„μ§€μ†κ°€λ½λ§Œμ„ μ΄μš©ν•΄μ„œ μˆ«μžλ§Œμ„ μž…λ ₯ν•˜λ €κ³  ν•©λ‹ˆλ‹€.
맨 처음 왼손 엄지손가락은 * ν‚€νŒ¨λ“œμ— 였λ₯Έμ† 엄지손가락은 # ν‚€νŒ¨λ“œ μœ„μΉ˜μ—μ„œ μ‹œμž‘ν•˜λ©°, 엄지손가락을 μ‚¬μš©ν•˜λŠ” κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  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 ν•¨μˆ˜λ₯Ό μ™„μ„±ν•΄μ£Όμ„Έμš”.

 

πŸ€” 풀이 방법

*은 10, #은 12, 0은 11둜 λ°”κΎΈμ–΄μ€€λ‹€.
κ·Έ ν›„ κ° 숫자λ₯Ό 3으둜 λ‚˜λˆ„μ—ˆμ„ λ•Œ λ‚˜λ¨Έμ§€κ°€ 1, 2, 0이 λœλ‹€.
μ΄λ•Œ, 1은 왼손, 2λŠ” κ°€μš΄λ°, 3은 였λ₯Έμ†μ΄ λœλ‹€.

ν‚€νŒ¨λ“œλ₯Ό λˆ„λ₯Ό λ•Œλ§ˆλ‹€ 왼손과 였λ₯Έμ†μ΄ 각각 λˆ„λ₯Έ 번호λ₯Ό μ €μž₯ν•œλ‹€.

κ°€μš΄λ° 2, 5, 8, 0의 κ²½μš°λŠ” μ €μž₯된 번호λ₯Ό μ΄μš©ν•˜μ—¬ 거리λ₯Ό κ³„μ‚°ν•œλ‹€.
let leftAbs = abs((num - left) / 3) + abs((num - left) % 3)
μ™Όμͺ½κ³Ό 였λ₯Έμͺ½μ˜ 거리λ₯Ό λΉ„κ΅ν•˜μ—¬ 더 κ°€κΉŒμš΄ 거리의 μ†κ°€λ½μœΌλ‘œ 번호λ₯Ό λˆ„λ₯Έλ‹€.
λ§Œμ•½ 거리가 같을 κ²½μš°μ—λŠ” 였λ₯Έμ†μž‘μ΄λŠ” 였λ₯Έμ†μœΌλ‘œ μ™Όμ†μž‘μ΄λŠ” μ™Όμ†μœΌλ‘œ λˆ„λ₯Έλ‹€.

 

πŸ‘©πŸ»‍πŸ’» Swift Code

import Foundation

func solution(_ numbers:[Int], _ hand:String) -> String {
    var numbers = numbers.map{Int(String($0).replacingOccurrences(of: "0", with: "11"))!}
    var hand = hand == "left" ? "L" : "R"
    var result = ""
    var left = 10
    var right = 12

    print(numbers)

    for num in numbers {
        // 1, 4, 7 -> Left | 3, 6, 9 -> Right
        if num != 11 && num % 3 == 1 {
            left = num
            result.append("L")
        } else if num != 11 && num % 3 == 0 {
            right = num
            result.append("R")
        }

        // 2, 5, 8, 0
        else if num == 10 || num % 3 == 2 {
            let leftAbs = abs((num - left) / 3) + abs((num - left) % 3)
            let rightAbs = abs((num - right) / 3) + abs((num - right) % 3)

            // 거리가 같을 경우
            if leftAbs == rightAbs {
                if hand == "L" { left = num } else { right = num }
                result.append(hand)
            }

            // 왼손이 κ°€κΉŒμšΈ 경우
            else if leftAbs < rightAbs {
                left = num
                result.append("L")
            }

            // 였λ₯Έμ†μ΄ κ°€κΉŒμšΈ 경우
            else if rightAbs < leftAbs {
                right = num
                result.append("R")
            }
        }
    }

    return 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"

programmers.co.kr

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2024/11   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
κΈ€ 보관함