-
[Algorithm] ํ๋ก๊ทธ๋๋จธ์ค [์นด์นด์ค ์ธํด] ํคํจ๋ ๋๋ฅด๊ธฐ Level1 (Swift)Algorithm 2022. 2. 6. 16:02
์ฝ๋ฉํ ์คํธ ์ฐ์ต - ํคํจ๋ ๋๋ฅด๊ธฐ
[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
๋ฌธ์ ํ์ด
์ ๋ ฅ์ผ๋ก ์ค๋ numbers ๋ฐฐ์ด์ ์๋ ์ซ์๋ค์ ๋๋ฅด๋๋ฐ, ์ด ๋ ์ฌ์ฉํ ์๊ฐ๋ฝ์ ๋ฌธ์์ด๋ก ๋ฆฌํดํ๋ ๋ฌธ์ .
๋จผ์ keypad๋ผ๋ ๋ฐฐ์ด์ ํคํจ๋ ํํ๋ฅผ ์ ์ฅํ๋ค.
let keypad = [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["*", "0", "#"]]ํคํจ๋ ๋ฐฐ์ด์ ์๋์ ๊ฐ์ด ์ ์ฅ๋์ด์๋ค.

[1, 4, 7]์ ์ผ์ ์์ง ์๊ฐ๋ฝ๋ง ๊ฐ๋ฅํ๊ณ , [3, 6, 9]๋ ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ๋ง ๊ฐ๋ฅํ๋ฏ๋ก ๋ฐ๋ก ๋ฐฐ์ด์ ์ ์ฅํด์ฃผ์๋ค.
let leftOnly = [1, 4, 7] // ์ผ์ ์์ง์๊ฐ๋ฝ๋ง ๊ฐ๋ฅ let rightOnly = [3, 6, 9] // ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ๋ง ๊ฐ๋ฅ์ผ์ ์์ง ์๊ฐ๋ฝ ์์น์ ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ ์์น๋ฅผ ๋ณ์๋ก ์ ์ฅํ๋ค.
- ์ด๊ธฐ๊ฐ์ ํด๋น ์๊ฐ๋ฝ์ ์์ ์์น.
- ์ผ์ ์์ง ์๊ฐ๋ฝ์ *์์, ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ์ #์์ ์์ํ๋ฏ๋ก, leftPosition์๋ (3, 0)์, rightPosition์๋ (3, 2)๋ฅผ ์ ์ฅํ๋ค.
var leftPosition = (3, 0) // ์ต์ด ์ผ์ ์์ง ์๊ฐ๋ฝ ์์ ์์น var rightPosition = (3, 2) // ์ต์ด ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ ์์ ์์นnumbers ๋ฐฐ์ด์ ์์๋ฅผ for๋ฌธ์ ํตํด ๋๋ฉด์ 3๊ฐ์ง ๊ฒฝ์ฐ๋ก ๋๋ ์ ์ฒ๋ฆฌํ๋ค.
1. num์ด [1, 4, 7]์ ํด๋นํ๋ ๊ฒฝ์ฐ
- ํด๋น leftPosition์ ์์น ์ ์ฅ ํ, result์ “L”์ ์ถ๊ฐ
2. num์ด [3, 6, 9]์ ํด๋นํ๋ ๊ฒฝ์ฐ
- ํด๋น rightPosition์ ์์น ์ ์ฅ ํ, result์ “R”์ ์ถ๊ฐ
3. ๊ทธ ์ธ์ ๊ฒฝ์ฐ
num์ ์์น๋ฅผ targetPosition์ ์ ์ฅํ ํ, ํ์ฌ leftPosition๊ณผ rightPosition์ ์์น์์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
targetPosition๊ณผ ์ผ์ ์์ง ์๊ฐ๋ฝ์ ๊ฑฐ๋ฆฌ : leftToTarget
targetPosition๊ณผ ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ์ ๊ฑฐ๋ฆฌ : rightToTarget
3-1. leftToTarget์ด ๋ ํด ๊ฒฝ์ฐ
- ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ ์ด๋์ํค๊ณ , ํด๋น rightPosition์ ์์น ์ ์ฅ ํ, result์ “R”์ ์ถ๊ฐ
3-2. rightToTarget์ด ๋ ํด ๊ฒฝ์ฐ
- ์ผ์ ์์ง ์๊ฐ๋ฝ ์ด๋์ํค๊ณ , ํด๋น leftPosition์ ์์น ์ ์ฅ ํ, result์ “L”์ ์ถ๊ฐ
3-3. ๋ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
- ์ผ์ ์ก์ด๋ result์ “L”์, ์ค๋ฅธ์ ์ก์ด๋ result์ “R”์ ์ถ๊ฐ
for ๋ฌธ์ ๋ค ๋๊ณ ๋ ํ์ result๋ฅผ ๋ฆฌํดํ๋ฉด ์ ๋ต์ด๋ค.
์์ค ์ฝ๋ (Swift)
// // แแ ตแแ ขแแ ณแแ ฎแ แ ณแแ ต.swift // Programmers // // Created by ์์ํฌ on 2022/02/06. // import Foundation func solution(_ numbers:[Int], _ hand:String) -> String { var result = "" let keypad = [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"], ["*", "0", "#"]] let leftOnly = [1, 4, 7] // ์ผ์ ์์ง์๊ฐ๋ฝ๋ง ๊ฐ๋ฅ let rightOnly = [3, 6, 9] // ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ๋ง ๊ฐ๋ฅ var leftPosition = (3, 0) // ์ผ์ ์์ง ์๊ฐ๋ฝ ์์น (์ต์ด ์์ ์์น๋ *) var rightPosition = (3, 2) // ์ค๋ฅธ์ ์์ง ์๊ฐ๋ฝ ์์น (์ต์ด ์์ ์์น๋ #) for num in numbers { // 1, 4, 7์ ์ผ์ ์์ง์๊ฐ๋ฝ๋ง ๊ฐ๋ฅ if leftOnly.contains(num) { result.append("L") // ์ผ์ ์์ง์๊ฐ๋ฝ ์ด๋์์ผ์ฃผ๊ธฐ MoveLeftHand: for i in 0..<4 { for j in 0..<3 { if let targetNum = Int(keypad[i][j]), targetNum == num { leftPosition = (i, j) // ์์น ์ ์ฅ break MoveLeftHand } } } continue } // 3, 6, 9๋ ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ๋ง ๊ฐ๋ฅ if rightOnly.contains(num) { result.append("R") // ์ค๋ฅธ์ ์์ง์๊ฐ๋ฝ ์ด๋์์ผ์ฃผ๊ธฐ MoveRightHand: for i in 0..<4 { for j in 0..<3 { if let targetNum = Int(keypad[i][j]), targetNum == num { rightPosition = (i, j) // ์์น ์ ์ฅ break MoveRightHand } } } continue } // ๊ทธ ์ธ์ ๊ฒฝ์ฐ // target์ ์ธ๋ฑ์ค ๊ตฌํ๊ธฐ var targetIndex = (0, 0) GetTarget: for i in 0..<4 { for j in 0..<3 { if let targetNum = Int(keypad[i][j]), targetNum == num { targetIndex.0 = i targetIndex.1 = j break GetTarget } } } // left, right์์ target๊น์ง์ ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ let leftToTarget = abs(leftPosition.0 - targetIndex.0) + abs(leftPosition.1 - targetIndex.1) let rightToTarget = abs(rightPosition.0 - targetIndex.0) + abs(rightPosition.1 - targetIndex.1) if leftToTarget < rightToTarget { // ์ผ์ชฝ ์์ง์๊ฐ๋ฝ ์ด๋์ํค๊ธฐ leftPosition = (targetIndex.0, targetIndex.1) result.append("L") } else if leftToTarget > rightToTarget { // ์ค๋ฅธ์ชฝ ์์ง์๊ฐ๋ฝ ์ด๋์ํค๊ธฐ rightPosition = (targetIndex.0, targetIndex.1) result.append("R") } else if leftToTarget == rightToTarget { if hand == "left" { leftPosition = (targetIndex.0, targetIndex.1) result.append("L") } else { rightPosition = (targetIndex.0, targetIndex.1) result.append("R") } } } return result }'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] BFS & DFS (0) 2022.03.15 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์ ๊ณ ๊ฒฐ๊ณผ ๋ฐ๊ธฐ Level1 (Swift) (0) 2022.02.06 [Algorithm] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (Swift/C++) (0) 2022.02.01 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์คํจ์จ Level1 (Swift) (0) 2022.02.01 [Algorithm] ํ๋ก๊ทธ๋๋จธ์ค ์์ ์ํธ Level 1 (Swift) (0) 2022.01.31